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

liczby pierwsze

Object Storage Arubacloud
0 głosów
261 wizyt
pytanie zadane 1 stycznia 2018 w C i C++ przez mn130496 Gaduła (3,530 p.)

Witam 

Chciałem napisać program który wyświetli mi wszystkie liczby pierwsze z zakresu 2...N.Napisałem program który sprawdza czy liczba jest pierwsza i nie wiem co dalej , męczę się z tym zadaniem już dłuży czas i niewiem co robie źle.Czy może ktoś mi pomóc?

pozdrawiam

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
     int p, i;

     printf("Podaj liczbe: ");

     scanf("%d", &p);

     for(i = 2; i < p; i++)

     {

          if(p % i == 0)

          {

               printf("%d  nie jest liczba pierwsza.\n", p);

               system("PAUSE");

               return (1);

          }
          else
          {
                printf("%d jest liczba pierwsza.\n", p);

          }

     }

     return (0);
}

 

3 odpowiedzi

+1 głos
odpowiedź 1 stycznia 2018 przez Arkadiusz Sikorski Pasjonat (20,160 p.)

Powinieneś mieć dwie pętle, jedną sprawdzającą konkretną liczbę i oraz drugą, wewnętrzną, która będzie służyła do sprawdzania wszystkich dzielników rozpatrywanej liczby i. Zauważ, że jest to podejście naiwne i dla dużych N będzie mało efektywne. Zobacz sito Eratostenesa.

0 głosów
odpowiedź 1 stycznia 2018 przez niezalogowany
Czy liczba jest pierwsza możesz stwierdzić dopiero po sprawdzeniu wszystkich dzielników, a nie od razu kiedy if się nie spełni. To co masz w else powinno stać za pętlą ;)
0 głosów
odpowiedź 1 stycznia 2018 przez k222 Nałogowiec (30,150 p.)
- weź wszystko pomiędzy linijką 10 i 33 w pętlę for dającą liczby od 2 do N i sprawdzaj każdą z nich swoim działającym programem,

- po co tam jest to return(1) ???

- sprawdzając podzielniki liczby wystarczy sprawdzić czy dzieli się przez 2, jeżeli nie to odpada co druga liczba do sprawdzenia, poza tym wystarczy sprawdzić podzielność przez liczby z przedziału <2,sqrt(p)> bo jak tam nie będzie dzielników to w przedziale (sqrt(p),p) też ich nie będzie, te dwa zabiegi mocno przyspieszą program bo ilość sprawdzanych liczb spadnie drastycznie,

- pobaw się sitem erastostenesa, ono jest właśnie stworzone do takiego zadania i chyba najszybsze z możliwych opcji,

Podobne pytania

0 głosów
1 odpowiedź 221 wizyt
pytanie zadane 10 kwietnia 2021 w SPOJ przez AizoOz Początkujący (490 p.)
0 głosów
1 odpowiedź 370 wizyt
pytanie zadane 18 grudnia 2016 w C i C++ przez Kamila1999 Nowicjusz (140 p.)
0 głosów
3 odpowiedzi 287 wizyt
pytanie zadane 2 czerwca 2023 w C i C++ przez polandonion Mądrala (7,040 p.)

92,555 zapytań

141,403 odpowiedzi

319,554 komentarzy

61,939 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!

...