??
int Pierwsze[1000], Pozostale[1000];
int k=0,l=0;
/*...*/
for(int i = 0;i < ile;i++){
if(l_pierwsza(tab[i] == 1)){
Pierwsze[k] = tab[i];
k++;
}
else{
Pozostale[l] = tab[i];
l++;
}
}
Ten fragment
pierwsza=true;
for (i=3;(i<=sqrt(liczba));i+=2)
if (!(liczba%i))
pierwsza=false;
return pierwsza;
jest napisany bardzo nieoptymalnie.
- jeżeli liczba jest duża (około miliarda) i dzieli się przez 3, to Twój program wykona ponad 30 tysięcy niepotrzebnych operacji sqrt(liczba) i liczba%i
- pierwiastkowanie jest wolne, powinno sie je zrobić tylko raz.
Proponuję taką wersję:
double gr=sqrt(liczba)
for((i=3;i<=gr;i++)
if(!(liczba%i))
return false;
return true;
karol_cpp napisał(a)
[...] nie wiem jak zrobic dwie tablice i wpisac w jedna liczby pierwsze a w druga zlozone..
[...]
Napisałem Ci jak wpisać w tablice liczby pierwsze a w drugą pozostałe, potem wystarczy wyświetlić te tablice w pętli.
W powyższym poście jest przykład
int l_pierwsza(int liczba)
{ bool pierwsza;
int i;
if (liczba<2)
return false;
else
if (!(liczba%2) && (liczba!=2))
return false;
pierwsza=true;
for (i=3;(i<=sqrt(liczba));i+=2)
if (!(liczba%i))
pierwsza=false;
return pierwsza;
}
jak nie należy pisać funkcji sprawdzającej czy dana liczba jest pierwsza. Uzasadnienie jest kilka postów wcześniej.
Napisałeś
dla innych uzytkownikow
chciałem zatem ostrzec ewentualnych "innych użytkowników". Poza tym 1000 to jest ograniczenie na ilość liczb, a nie na ich wielkość. A dla dużych liczb Twoja pętla wykonuje się ponad 1000 razy dłużej niż moja.
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.