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

Sprawdzenie ile jest liczb w zadanym przedziale - problem z działaniem

Object Storage Arubacloud
+2 głosów
351 wizyt
pytanie zadane 13 listopada 2021 w C i C++ przez mn130496 Gaduła (3,530 p.)

Witam 

Mam takie zadanie do wykonania:

Wprowadz liczbe calkowita N. 

a) sprawdz czy N jest liczba pierwsza,

b) sprawdz, ile liczb z zakresu 2..N jest liczbami pierwszymi.
Napisałem taki kod programu w języku C:

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

int main(void)
{
    int N, i, ile = 0 ;

    printf("Podaj liczbe: \n");
    scanf("%d", &N);

    // Sprawdzenie czy N jest liczb¹ pierwsza
    for(i = 2; i < N; i++)
    {
        if(N % i == 0)
        {
             printf("Podana liczba nie jest liczba pierwsza ");
             return(0);
        }
    }
     printf("Podana liczba jest liczba pierwsza\n");

     //Sprawdzenie  ile liczb z zakresu 2 ....N jest liczbami pierwszymi
     printf("------------------------------------------------------");
     printf("Podaj liczbe: \n");
     scanf("%d", &N);
      for(i = 2; i < N; i++)
      {
            if(N % i == 0)
            {
                printf("Podana liczba nie jest liczba pierwsza. \n");
                return(0);
            } else if(N % i != 0)
            {
                ile = ile + 1;
            }
      }
      printf("%d", ile);
    return (0);
}

Podpunkt a zrobiłem bez większych problemów. Problem pojawił się w przypadku podpunktu b. w rezultacie jak podam liczbe 7 to pokazuje mi że w zakresie od 2 do 7 jest 5 liczb pierwszych. Czy ktoś mógłby mi pomóc w znalezieniu błędu i poprawieniu go?. Z góry dziękuję

pozdrawiam

1 odpowiedź

+1 głos
odpowiedź 13 listopada 2021 przez Wiciorny Ekspert (269,710 p.)
edycja 13 listopada 2021 przez Wiciorny

bo taki warunek nie jest poprawny 

else if(N % i != 0)

N % i - gdzie i zmienia się więc generalnie 6/6 zliczy dla przykładu 

Odpowiedź masz zresztą w pierwszej częsci, masz sprawdzić czy liczba N- jest pierwsza,spróbuj podejść do tego analogicznie ... iterując po wszystkich liczbach do N sprawdzająć tę samą pętle

czyli opakować "pętle w pętli"  :) 

Spójrz na to, to jest rozwiązanie drugiego przypadku w taki sposób możesz to zawsze ubrać w funkcje osobno, dodatkowo opisałem Ci co gdzie jest-> tutaj na sztywno ustawiłem tylko liczbe N 

#include <iostream>

using namespace std;

int main()
{   
    int n=7; // tutaj bedzie wczyta wartosc 
    int num=1;
    bool is_prime;
    int j = 0;
    //zliczaj liczby pierwsze 
    do 
    {   is_prime = true;    //  Assume it's prime
        num++; 
        //sprawdz czy pierwsza
        for (int i = 2; i < num; i++)
        {   if (num % i == 0)
            {   is_prime = false; 
                break;  // przerwij
            }
        }
        if (is_prime)
        {   cout << num << '\n';
            j++;  // zlicz liczby pierwsze 
        }
        --n;
    }
    while (0 < n);
   cout <<"Ilość: " <<j << '\n'; // wypisz ilość
}

na koniec wypisuje ilość, w trakcie wypisuje Ci liczby pierwsze w przedziale zamkniętym 

Podobne pytania

0 głosów
1 odpowiedź 2,279 wizyt
0 głosów
3 odpowiedzi 287 wizyt
pytanie zadane 2 czerwca 2023 w C i C++ przez polandonion Mądrala (7,040 p.)
0 głosów
1 odpowiedź 3,199 wizyt
pytanie zadane 2 marca 2019 w Java przez mn130496 Gaduła (3,530 p.)

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

61,936 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...