Oto kod:
#include <iostream>
using namespace std;
bool prime(int);
int main()
{
int x;
cout<<"Enter your number: ";
cin>>x;
if(prime(x) == true)
cout<<"Number is prime";
if(prime(x) == false)
cout<<"Number is not prime";
return 0;
}
bool prime(int number)
{
for(int i=2; i<number;i++)
{
if(number%i==0)
return false;
if(number%i!=0)
return true;
}
}
Program działa dla wszystkich liczb pierwszych (przynajmniej dla tych, których próbowałem!) Ale dla niektórych kompozytów jest jednak powiedziane: Liczba nie jest liczbą pierwszą! Gdzie popełniłem błąd?
Odpowiedzi:
2 dla odpowiedzi № 1Kompozyty nie są Prime i wszystkie nie-pierwsze emitują, „Liczba nie jest liczbą pierwszą”
Ale musisz zmodyfikować kod:
bool prime(int number)
{
for(int i=2; i<number;i++)
{
if(number%i==0)
return false;
}
return true;
}
Możesz stwierdzić tylko, czy liczba jest liczbą pierwszą po niepowodzeniu wszystkich testów niepierwszych
4 dla odpowiedzi nr 2
prime
funkcja powinna wyglądać następująco
bool prime(int number)
{
for(int i=2; i*i<number;i++) //Only till square root is enough.
{
//For any number which is divisible, return false.
if(number%i==0)
return false;
}
//Else, divisible by no one is prime.
return true;
}
I w tej części użyj innego.
if(prime(x) == true)
cout<<"Number is prime";
else
cout<<"Number is not prime";
Nie trzeba dwa razy wywoływać tej samej funkcji.