tablica liczb pierwszych i złożonych

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.

  1. 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
  2. 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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1