??
0
0
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++;
}
}
0
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;
0
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.
0
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.
0
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.