• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Program sprawdzający czy podana liczba jest liczbą pierwszą

Cloud VPS
0 głosów
560 wizyt
pytanie zadane 23 lutego 2023 w C i C++ przez głodnywiedzy Nowicjusz (120 p.)
#include <stdio.h>
#include <math.h>
int n = 0; //liczba testow

int main(void){
  int t = 0;
  int i = 0;
  int liczba = 0;
  
  //główna pętla programu
  for (n=1; n<=5; n++){
    scanf("%d", &liczba);//użytkownik podaje liczbę
    float pierwiastek = sqrt(liczba);//pierwiastek kwadratowy z wprowadzonej liczby
    
    //pętla sprawdzająca dzielniki pierwiastka z wprowadzonej liczby
    for(i=2; i<pierwiastek; i++){
       if(fmod(pierwiastek,i)==0) {//sprawdzam czy pierwiastek jest podzielny przez liczbę 
        printf("\nNIE\n");//jeśli tak to nie jest liczbą pierwszą
        t = 1;
    }

}
    if(t=0) printf("\nTAK\n");
    //jeśli zmienna t nie zmieniła wartości to oznacza, że jest to liczba pierwsza
    t=0;   
  
  }
  return 0;
}

Program tylko 5 razy każe podać liczbę, ale  na wyjściu nie podaje odpowiedzi "tak" lub "nie", po czym się zamyka? Może ktoś mi wytłumaczyć gdzie jest błąd?

2 odpowiedzi

+1 głos
odpowiedź 23 lutego 2023 przez pasjonat_algorytmiki Pasjonat (19,540 p.)
Pisanie for (int i = 2; i < pierwiastek; ++i), jest nie za fajnym pomysłem, np dla liczba = 4, Ci się wywali.

Lepiej napisz: for (int i = 2; i * i <= liczba; ++i)

A jak już barzdo chcesz pisać, to napisz: for (int i = 2; i <= pierwiastek; ++i)
0 głosów
odpowiedź 23 lutego 2023 przez reaktywny Nałogowiec (46,230 p.)
Polecam zamienić:

if(t=0)

na

if(t==0)

Dlaczego sprawdzasz czy pierwiastek jest podzielny?!?, masz sprawdzać czy liczba jest podzielna przez bieżące i w pętli :)

if(fmod(liczba, i)==0)
1
komentarz 23 lutego 2023 przez głodnywiedzy Nowicjusz (120 p.)
Chyba źle zrozumiałem własność o pierwiastku liczby pierwszej. Z tym pierwiastkiem był to zabieg w ramach optymalizacji programu dla bardzo dużych liczb. Dziękuję za pomoc!

Podobne pytania

0 głosów
1 odpowiedź 1,504 wizyt
0 głosów
0 odpowiedzi 1,187 wizyt
0 głosów
2 odpowiedzi 1,191 wizyt
pytanie zadane 11 listopada 2019 w C# przez Skajlet77 Nowicjusz (170 p.)

93,487 zapytań

142,420 odpowiedzi

322,772 komentarzy

62,903 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...