Jest już taki temat na forum z tym zadaniem, ale ja mam własne rozwiązanie i mały problem. Może będzie ktoś miał chęci się temu przyjrzeć. W pliku napis.txt znajduje się 1000 wyrazów, składających się z liter alfabetu łacińskiego. Ja muszę sprawdzić, ile z nich po zamianie na kod ASCII będzie liczbami pierwszymi. Pomysł był taki, aby pobierać kolejne wyrazy z tego pliku, następnie przy pomocy typu char oraz int zamieniam litery na liczby, liczby sumuje i sprawdzam czy są one liczbami pierwszymi.
Mój kod wygląda tak:
#include <iostream> #include <fstream> #include <string> #include <cstdlib> using namespace std; int main() { fstream plik; plik.open("napis.txt", ios::in); string dane; char symbol; int liczba; int suma = 0; int ilosc_liczb = 0; int ilosc_liczb_zlozonych = 0; while(!plik.eof()) { suma = 0; plik >> dane; for(int j=0; j<dane.size(); j++) { symbol = dane[j]; liczba = symbol; suma = liczba + suma; cout << liczba << ""<< suma << endl; } for(int p=2; p<suma; p++) if(suma % p == 0) { cout << "Nie, nie jest to liczba pierwsza"<< endl; ilosc_liczb_zlozonych++; break; } else if (suma % p != 0) { ilosc_liczb++; } } plik.close(); cout << "Liczb pierwszych jest: "<< ilosc_liczb << endl; cout << "Liczb zlozonych jest: "<< ilosc_liczb_zlozonych << endl; return 0; }
Liczby pierwsze wylicza mi niepoprawnie. Za to liczby złożone wylicza poprawnie. Złożonych jest 878, taki też wynik otrzymuje. Liczb pierwszych otrzymuje 127580, powinno ich być 122.
Plik tekstowy jeśli ktoś by potrzebował: http://s000.tinyupload.com/index.php?file_id=06264867227593344122