/ / program podaje błędne dane wyjściowe dla niektórych wpisów! Co jest nie tak? [zamknięte] - c ++

program daje mi błędne dane wyjściowe dla niektórych wpisów! Co jest nie tak? [zamknięty] - c ++

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 № 1

Kompozyty 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.