ASD - Liczby pierwsze, implementacja w C++

0

Witam! Na przedmiocie ASD mam do zrobienia następujące zadanie. Oto co udało mi się zmajstrować. Czy to jest dobrze ?
Pozdrawiam,

TREŚĆ ZADANIA:
Należy wyznaczyć wszystkie liczby pierwszych w przedziale domkniętym [a, b] (2=<a=<b=<1000).

Program powinien:

  1. Czytać z pliku tekstowego początek i koniec przedziału.
  2. Zapisać do pliku tekstowego ilość liczb pierwszych, kolejne liczby pierwsze z zadanego przedziału oraz liczbę wykonanych operacji elementarnych (dla każdej z metod).

Dane:
¨W pierwszej linii pliku In0104.txt znajdują się dwie liczby naturalne a, b (takie że 2=<a=<b=<1000) oddzielone pojedynczą spacją.

Wyjście:
¨Plik wyjściowy Out0104.txt powinien mieć następujący format
przedział: [a, b]
I metoda:
... ... ... ...// liczby pierwsze z przedziału [a, b] oddzielone pojedynczą spacją, wyznaczone metodą pierwszą
ilość liczb pierwszych = ... ; ilość wykonanych operacji elementarnych = ...
II metoda:
... ... ... ...// liczby pierwsze z przedziału [a, b] oddzielone pojedynczą spacją, wyznaczone metodą drugą
ilość liczb pierwszych = ... ; ilość wykonanych operacji elementarnych = ...

Przykład
In0104.txt:
2 60
Out0104.txt:
przedział: [2, 60]
I metoda:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59
ilość liczb pierwszych = 16 ; ilość wykonanych operacji elementarnych = ...
II metoda:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59
ilość liczb pierwszych = 16 ; ilość wykonanych operacji elementarnych = ...

KOD W C++ :

#include <iostream>

using namespace std;

#define _FILE_READ "In0104.txt"
#define _FILE_WRITE "Out0104.txt"
#include <fstream>

int get_n(ifstream &file){
	string line;
	getline(file, line);
	stringstream linestream(line);
	int n;
	linestream >> n;
	return n;
}

void alg(){
	ifstream file(_FILE_READ);
	ofstream file_out(_FILE_WRITE);
	string line;
	VAR(n,get_n(file));
	VI tab;

	while(getline(file, line)) {
		int a;
		stringstream linestream(line);
		linestream >> a;
		tab.PB(a);
	}

	/* Algorytm (n) */ 
    int s = 0, w = 0;
    int iS = 0, iK = 0;
    REP(i,n){
      if (w > 0){
        w += tab[i]; /* oplaca sie wziac poprzednie w */
      	iK = i;
      }else{
        w = tab[i]; /* nie oplaca sie brac poprzedniego w */
        iS = i+1;
      }
      if (w > s) s = w;
    }

    file_out << s << " " << iS << " " << iK;

	file.close();
	file_out.close();
}

int main(){
	cout << "ASD\n===" << endl;
	alg();
}
 

0

jakoś nie chcę mi się wierzyć że sam to napisałeś...

1

Czy to jest dobrze ?

No nie wiem.. sprawdziłeś?

1 użytkowników online, w tym zalogowanych: 0, gości: 1