Witam wszystkich forumowiczow :) Moj problem polega na tym... Program wykonuje sie prawidlowo dla tej petli for: for(int i=2;i*i<=n;i++) if(n%i==0) Poprawnie wyszukuje liczbe pierwsza itp. Dlaczego wiec program zle pokazuje, jezeli w miejsce i*i<=n damy i<=n? for(int i=2;i<=n;i++) if(n%i==0) Wydawalo mi sie, ze to i*i jest po to, by program wykonal mniej operacji, bo szybciej dochodzimy do tego, jak dlugo pentla ma sie wykonywac. Prosze o dokladne wytlumaczenie bo w C++ programuje od krotkiego czasu i nie jestem geniuszem matematycznym :) #include<iostream> #include<cstdlib> using namespace std; bool czy_pierwsza(int n) { if(n<2) return false; //gdy liczba jest mniejsza niż 2 to nie jest pierwszą for(int i=2;i*i<=n;i++) if(n%i==0) return false; //gdy znajdziemy dzielnik, to dana liczba nie jest pierwsza return true; } int main() { int n; cout<<"Podaj liczbę: "; cin>>n; if(czy_pierwsza(n)) //lub czy_pierwsza(n)==1 cout<<"Liczba "<<n<<" jest pierwsza"<<endl; else cout<<"Liczba "<<n<<" nie jest pierwsza"<<endl; }