Pary liczb pierwszych
Ostatnio zmodyfikowano 2016-01-23 20:07
oblac Temat założony przez niniejszego użytkownika |
Pary liczb pierwszych » 2016-01-23 18:32:17 Zaznaczam, że program który piszę jest jednym z moich pierwszych. Korzystam tylko z podstaw C++. Moim zadaniem jest napisanie programu, w którym użytkownik podaje granice przedziału liczb naturalnych <a,b> (0<=a<b<=1000000000), który znajdzie wszystkie liczby pierwsze z tego przedziału, a następnie znajdzie i wypisze pary takich liczb x,y, takich że x=y+2. Większość kodu jest już gotowa i działa. Wklejam go poniżej. Program znajduje i wypisuje liczby pierwsze. Teraz mam problem z wciśnięciem tutaj tego ostatniego elementu, o parach. Proszę o drobną pomoc, podpowiedź. Próbowałam wcisnąć instrukcję warunkową if w pierwszej pętli for, również na końcu else. Próbowałam dojść do tego jakoś, ale niestety bezskutecznie. Proszę o wyrozumiałość, dopiero zaczynam się uczyć. I oczywiście wielkie dzięki za wszelką pomoc. :)
#include <iostream> #include <cmath> #include <cstdlib> using namespace std;
int main () { int a, b, x, y; cout<<"Prosze podac dwie liczby naturalne z przedialu <0, 1000000000>"<<endl; cout<<"Beda one tworzyc przedzial. Liczba 1 musi byc mniejsza od liczby 2"<<endl<<endl; cout<<"Podaj 1 liczbe - poczatek przedzialu: "; cin>>a; cout<<"Podaj 2 liczbe - koniec przedzialu: "; cin>>b; cout<<endl;
if ((a>b)||(a<0)||(a>1000000000)||(b<0)||(b>1000000000)) cout<<"Wprowadzono zle liczby"; else { cout<<"Liczby pierwsze z podanego przedzialu: "<<endl<<"2, "; for(int i=3; i<=b; i++) { x=0; for (int j=2; j<i; j++) { if (!(i%j)) x=1; } if(!x) cout<<i<<", "; }
} cout<<endl<<endl;
return 0;
}
|
|
bombatom69 |
» 2016-01-23 19:17:11 Zapoznaj się z sitem Eratostenesa i nie męcz procesora :) |
|
oblac Temat założony przez niniejszego użytkownika |
» 2016-01-23 19:20:39 Zapoznałam, jednak jest to zadanie "do szkoły", gdzie nie wprowadzono zmiennych typu bool, muszę się posługiwać co najwyżej pętlami i "ifem". |
|
bombatom69 |
» 2016-01-23 19:26:45 bool nie jest niezbędny, c++ wywodzi się z C. Dawniej boola nie było w ogóle. Fakt, że to było w zamierzchłych czasach :) |
|
oblac Temat założony przez niniejszego użytkownika |
» 2016-01-23 19:28:38 Niemniej jednak - liczby pierwsze mam już wypisane, brakuje mi drugiej części, zatem na nic mi Sito Ertostenesa. :) |
|
bombatom69 |
» 2016-01-23 19:38:46 W takiej sytuacji najprostszym rozwiązaniem jest zapamiętanie poprzedniego wyniku i sprawdzenie czy jest mniejszy o 2 od aktualnego. Jak sądzę szukasz tzw liczb pierwszych bliźniaczych. Wobec tego zapamiętany wynik wypisujesz dopiero wówczas gdy znajdziesz dla niego parę.
|
|
oblac Temat założony przez niniejszego użytkownika |
» 2016-01-23 19:55:04 Tzn. zapisanie "i" pod zmienną i sprawdzanie czy jest równy inna zmienna+2? Np. if(z=y+2) cout<<z<<y; ? |
|
bombatom69 |
» 2016-01-23 20:07:38 Każda liczba pierwsza większa od dwóch jest nieparzysta, czyli postaci 2n+1. Czasem nawet są to "rzadsze" ciągi. int n = 124354; int poprzednia = - 1; for( int i = 3; i <= n; i += 2 ) { if( funkcja_sprawdz_czy_pierwsza_albo_inny_zapis_sprawdzajacy( i ) ) { if( poprzednia + 2 == i ) { funkcja_wypisujaca( i ); } poprzednia = i; } }
|
|
« 1 » |