Skocz do zawartości

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

PhoeniX426

C++ modulo

Polecane posty

Witam. Mam pewien problem i nie wiem co mam z nim począć. Wiem że może to co zaraz napisze będzie banalne ale proszę o wyrozumiałość. Mianowicie postanowiłem stworzyć program który będzie mi wypisywał liczby pierwsze od 2 do 100. Wszytko było by fajnie ale:

int main()

{

for(int i=2;i<=100;i++)

{

if(i%2==1 && i%3==1)

{

cout<<i<<" ";

}

}

}

To jest podstawa postawy mojego kodu. I o co mi chodzi. Na początku chciałem by program wypisywał mi liczby niepodzielne przez 2 i 3. A oto wynik:

7 13 19 25 31 37 43 49 55 61 67 73 79 85 91 97

Moje pytanie jest takie czemu w wyniku nie ma liczby 5? Jest przecież niepodzielna 2 oraz 3.

Link do komentarza
Udostępnij na innych stronach

Moje pytanie jest takie czemu w wyniku nie ma liczby 5?

Brakuje jeszcze paru innych liczb (np. 11,17,23,29, 47)

if(i%2==1 && i%3==1)

Warunek do bani. Musiałbyś dopisywać po kolei każdą następna liczbę pierwszą.

Wyjście widzę takie - zainteresuj się metodą starogrecką.

A jak google się nie brzydzisz - na Stack Overflow jest kilka rozwiązań.

Link do komentarza
Udostępnij na innych stronach

Warunek (i%2==1 && i%3==1) oznacza, że

interesują nas liczby, których reszta z dzielenia przez 2 i przez 3 jest równa 1,

zakładam, że Autor miał na raczej na myśli, coś takiego :

(i%2 != 0 && i%3 != 0 ),

(bo w czy jest lepsza liczba, spełniająca warunek i%3==2 od liczby spełniającej warunek i%3==1),

ale, jak wyżej, ta metoda nie znajduje liczb pierwszych...

Dlaczego?

Z tego warunku wynika, że liczba pierwsza nie dzieli się bez reszty tylko przez 2 i przez 3, ale z definicji liczby pierwszej wynika, że nie istnieje liczba pierwsza od niej mniejsza, która jest jej dzielnikiem, zatem, co powyższy warunek zrobi z liczbami, które są iloczynem innych liczb pierwszych? np. 35 (5*7 - nie dzieli się, ani przez 2, ani przez 3... ale, co z tego, jeśli istnieją liczby pierwsze, będące jej dzielnikami?).

Link do komentarza
Udostępnij na innych stronach

zakładam, że Autor miał na raczej na myśli, coś takiego :

(i%2 != 0 && i%3 != 0 ),

(bo w czy jest lepsza liczba, spełniająca warunek i%3==2 od liczby spełniającej warunek i%3==1),

Coś w ten deseń. Na początku myślałem że wyrażenie %(modulo) zwraca 0 lub 1 w przypadku jeśli reszta jest lub jej nie ma.

Warunek do bani. Musiałbyś dopisywać po kolei każdą następna liczbę pierwszą.

Za radą wies.niaka użyłem po prostu sita Eratostenesa. I fakycznie denerwowało mnie że musiałbym ciągle dodawać kolejne if z następnymi liczbami pierwszymi. W końcu inaczej sobie z tym poradziłem:

int main()

{

int n=3000;

int TAB[n]; //tworzenie tablicy o długości n

int LICZBY[]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53}; //16 liczb

int j=0;

for(int i=0;i<n;i++) //Wypełnianie tablicy TAB samymi zerami

{

TAB=0;

}

for(int k=0;k<16;k++)

{

for(int i=0;i<n;i++)

{

if(TAB==1) //jeżeli napotkamy już liczbę z flagą to kontynuuj

{

continue;

}

if(i%LICZBY[j]==0)

{

TAB=1;

}

}

j++;

}

for(int x=0;x<16;x++) //upewniamy się czy liczby pierwsze tablicy LICZBY są napewno zaznaczone jako pierwsze w tablicy TAB

{

TAB[LICZBY[x]]=0;

}

TAB[0]=1; // 0 i 1 nie są liczbami pierwszymi

TAB[1]=1;

for(int i=0;i<n;i++) //wyświetlanie

{

if(TAB==0)

{

cout<<i<<" ";

}

}

}

Generalnie wszytko działa, sprawdzałem dla 120 i 200 liczb i wynik jest poprawny. Może troszkę przesadziłem z robieniem tablicy LICZBY z liczbami pierwszymi. Teraz z kolei się przyznam że zadanie to musiałem wykonać dla n=3000 liczb. No i muszę zrobić z tego skrypt na Unixa. I teraz mam pytanie czy w Unixie jest coś takiego jak continue w C++.

Link do komentarza
Udostępnij na innych stronach



  • Kto przegląda   0 użytkowników

    • Brak zalogowanych użytkowników przeglądających tę stronę.
×
×
  • Utwórz nowe...