Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Pary liczb pierwszych

Ostatnio zmodyfikowano 2016-01-23 20:07
Autor Wiadomość
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;

}




P-143926
bombatom69
» 2016-01-23 19:17:11
Zapoznaj się z sitem Eratostenesa i nie męcz procesora :)
P-143931
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".
P-143932
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 :)
P-143933
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. :)
P-143935
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ę.
P-143938
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; ?
P-143939
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.

C/C++
int n = 124354; // Twoj max
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 ); // skoro zna i to zna rowniez i-2
        }
        poprzednia = i;
    }
}
P-143940
« 1 »
  Strona 1 z 1