Oo. Moze zacznij od tego, ze nie warto sprawdzac podzielnosci przez 1 i przez wiecej niz x/2. A sprawdzanie mozesz przerwac po natrafieniu na pierwszy nietrywialny podzielnik. A najlepiej uzyj innego algorytmu np. Sito Eratostenesa: http://pl.wikipedia.org/wiki/Sito_Eratostenesa
@Pierwiastek_z_Czech: wg mnie ten program zadziała tylko dla liczb z dwoma podzielnikami.. zamieniłbym if (s==2) na if (s>=2) i for(d=2...) reszta powinna działać
edit: pomijając fakt, że jest to cholernie nieoptymalne
@Pierwiastek_z_Czech: Mała porada - nazywaj funkcje tak, żeby z nazwy było wiadomo co ona robi, bo potem stworzysz 100 funkcji i się zabijesz. W twoim przypadku powinno być coś w stylu
@blisher: Dzieki za te uwagi. Wprawdzie nazwalem zmienne i funkcje od pierwszych liter, np. "lp to liczba pierwsza, "d" to dzielniki, ale rzeczywiście można się zgubić. Nadal niestety nie potrafię znaleźć błędu, który powoduje że każda liczba jest uznawana za nie-pierwszą.
@Pierwiastek_z_Czech: przez 1 i samą siebie dzieli się każda, tobie raz s wzrasta przy d=1 a raz przy d=x, ogranicz zakres od 2 do pierwiastka z liczby i jeśli chociaż raz się podzieli to zwróć false
co jest nie tak w tym programie? Potrzebuje funkcji na liczbe pierw3szą, ale słabo ogarniam bool:
#include
using namespace std;
bool lp(int x)
{
int d, s=0;
for(d=1; d<=x; d++)
if (x%d==0) s=s++;
if (s==2) return true;
else return false;
}
int main(int argc, char *argv[])
{
int x;
cout<<"podaj liczbe"<
cin>>x;
if(lp(x))cout<<"liczba pierwsza"<
else cout<<"liczba nie jest pierwsza"<
system("PAUSE");
return EXIT_SUCCESS;
}
edit: pomijając fakt, że jest to cholernie nieoptymalne
bool CzyPierwsza()albo
bool IsPrimeNumber()