Hej :)
Dla zabawy stworzyłam tyci kod, który powinien stwierdzać czy podana liczba jest liczbą pierwszą, czy też nie jest.
Powinien działać na zasadzie Testu Fermata, czyli jeśli wczytujemy liczbę n, to każda liczba a z zakresu 1<a<n-1 podczas działania pow(a, n-1) % n powinna dawać wynik 1. To znaczy, reszta z dzielenia każdej liczby spotęgowanej z tego przedziału po prostu ma być równa 1.
Albo gdzieś omijam sensowny błąd, albo po prostu czegoś nie rozumiem, ale np. gdy podam liczbę n = 7 do sprawdzenia, czy jest liczbą pierwszą, to wg tego schematu program liczy, że 5 do potęgi 6 = 15624, co jest błędne, zamiast 15625, i przez to dostaję zwrot, że 7 nie jest liczbą pierwszą.
Ktoś pomoże?
Tu kod:
#include <iostream>
#include <cmath>
using namespace std;
bool ifprime(int n)
{
int result, prime;
cin>>n;
for(int a=1; a<n; a++)
{
result = pow(a, n-1);
cout << "result: " << result << endl;
prime = result%n;
cout << result <<"%"<<n<<" = "<< prime << endl;
if(prime!=1)
return false;
}
return true;
}
int main()
{
int n, times;
cout << "How many numbers?" << endl;
cin >>times;
for(int k=0; k<times; k++)
{
bool check;
check = ifprime(n);
if(check == true)
cout << "TAK" << endl;
else cout << "NIE" <<endl;
}
return 0;
}