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

liczby pierwsze

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
0 głosów
243 wizyt
pytanie zadane 2 stycznia 2020 w C i C++ przez ResCrove Obywatel (1,700 p.)

Witam, mam problem z napisaniem programu wypisującego liczby pierwsze z danego przedziału liczb <x1, x2>. Program wypisuje mi cały przedział zamiast poszczególnych liczb pierwszych.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{
    int x1 = 0;
    int x2 = 0;
    int i = 0;
    int k = 0;
    printf ("Podaj x1: ");
    scanf("%d", &x1);
    printf ("Podaj x2: ");
    scanf("%d", &x2);

    for (i = x1; i <= x2; i++)
    {
        for (k = 2; k <= i; k++)
        {
            if (i%k == 0)
                {
                   if (k == i)
                   {
                    printf ("%d ", i);
                   }
                }
        }
    }
    return 0;
}

 

2 odpowiedzi

+1 głos
odpowiedź 2 stycznia 2020 przez Mya Bywalec (2,790 p.)
wybrane 2 stycznia 2020 przez ResCrove
 
Najlepsza

Twój problem tkwi w tym, że pętla, w której licznikiem jest k zawsze wykonuje się w całości.
Liczba jest pierwsza tylko wtedy gdy prawdziwe są oba if-y. Dlatego gdy prawdziwy jest tylko pierwszy if wiesz, że liczba na pewno nie jest pierwsza i powinieneś przerwać sprawdzanie aktualnej liczby (przejść do następnego obiegu pętli z linii 16.). Jeśli nie przerwiesz wtedy pętli k zawsze dojdzie do wartości i i każda liczba zostanie wypisana.


if (k  ==  i)
{
   printf ("%d ", i);
}
else
   break;

 

+1 głos
odpowiedź 2 stycznia 2020 przez Bartek12 Mądrala (5,510 p.)

Musisz w jakiejś zmiennej zapisać wszystkie dzielniki tej liczby, a potem sprawdzić czy ich liczba wynosi 2. Jeżeli tak to ta liczba jest pierwsza.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
int main()
{
    int x1 = 0;
    int x2 = 0;
    int i = 0;
    int k = 0;
    printf ("Podaj x1: ");
    scanf("%d", &x1);
    printf ("Podaj x2: ");
    scanf("%d", &x2);
 
    for (i = x1; i <= x2;)
    {
        int d = 0;
        for (k = 1; k <= i;){
            if (i%k == 0) d++
            k++
        }
        if (d == 2) printf ("%d ", i);
        i++
    }
    return 0;
}

 

Podobne pytania

0 głosów
1 odpowiedź 463 wizyt
pytanie zadane 19 sierpnia 2020 w SPOJ przez Billy Użytkownik (680 p.)
0 głosów
2 odpowiedzi 863 wizyt
pytanie zadane 3 stycznia 2020 w C i C++ przez Hubertius Bywalec (2,970 p.)
0 głosów
1 odpowiedź 663 wizyt
pytanie zadane 2 stycznia 2020 w C i C++ przez ResCrove Obywatel (1,700 p.)

93,439 zapytań

142,431 odpowiedzi

322,674 komentarzy

62,802 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

...