Liczby pierwsze C++

19Radek88
Użytkownik
Użytkownik
Posty: 105
Rejestracja: 2 lis 2007, o 21:01
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 14 razy
Pomógł: 4 razy

Liczby pierwsze C++

Post autor: 19Radek88 »

Jak powinien wygladac kod w C++ do:

"Program wypisujący liczby pierwsze ze zbioru {1,2,3,...,n} (n podaje użytkownik)"

Pogubilem sie troche w petlach...
Awatar użytkownika
kadiii
Użytkownik
Użytkownik
Posty: 642
Rejestracja: 20 gru 2005, o 21:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Pomógł: 130 razy

Liczby pierwsze C++

Post autor: kadiii »

W necie jest tego masa. Poszukaj...(chociażby sito Eratostenesa )
1983
Użytkownik
Użytkownik
Posty: 5
Rejestracja: 3 gru 2007, o 12:53
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 1 raz
Pomógł: 1 raz

Liczby pierwsze C++

Post autor: 1983 »

Wspomniane sito Eratostenesa:

Kod: Zaznacz cały

#include <iostream>
using namespace std;

int main() {

   cout << "Podaj zakres: ";
   int e; //Zakres
   cin >>e;
   cout << "W zakresie od 0 do "<< e <<" znalazlem nast. liczby pierwsze:
" << endl;
    
   int f=e/2;

   bool l[e];
   for(int i=0;i<e;i++) l[i]=1;

   for(int i=2;i<f;i++) // sito
     if(l[i]) for(int j=i+i;j<e;j+=i) l[j]=0;

   // wypisanie liczb pierwszych od 1 do e
   int count=0;
   for(int i=1;i<e;i++)
   { 
     if(l[i])
     {
        cout << i << "	";
        count++;
     }
   }
   cout << "

W sumie " << count << " liczb pierwszych" << endl;
system("pause");
return 0;
} 
Rafal88K
Użytkownik
Użytkownik
Posty: 311
Rejestracja: 15 mar 2007, o 16:52
Płeć: Mężczyzna
Lokalizacja: Lublin
Podziękował: 28 razy
Pomógł: 54 razy

Liczby pierwsze C++

Post autor: Rafal88K »

Przykro mi al Twój program jest źle napisany
1983 pisze:bool l[e];

Ciekawe jak chcesz, żeby to działało w trybie pełnej zgodności? Musisz tu skorzystać z pamięci dynamicznej i tablice umieścić na stercie, a nie na stosie.

Kod: Zaznacz cały

#include <iostream>
using namespace std;

int main(int argc, char** argv)
{
    bool* t;
    int r;

    cin >> r;
    t = new bool[r];

    for(int i = 0; i < r; ++i)
    {
        t[i] = true;
    }

    for(int i = 0; i < r; ++i)
    {
        if(t[i])
        {
            cout << i + 1 << endl;
        }
    }

    system("pause");
    return 0;
}
DerSchmetterlig
Użytkownik
Użytkownik
Posty: 18
Rejestracja: 25 gru 2007, o 21:56
Płeć: Mężczyzna
Lokalizacja: Gniezno
Podziękował: 1 raz
Pomógł: 1 raz

Liczby pierwsze C++

Post autor: DerSchmetterlig »

Rafal88K Jak dla mnie to Twój program podaje wszystkie liczby od 1 do podanej, a nie tylko liczby pierwsze
Rafal88K
Użytkownik
Użytkownik
Posty: 311
Rejestracja: 15 mar 2007, o 16:52
Płeć: Mężczyzna
Lokalizacja: Lublin
Podziękował: 28 razy
Pomógł: 54 razy

Liczby pierwsze C++

Post autor: Rafal88K »

DerSchmetterlig brawo, tylko on nie miał podawać liczb pierwszych tylko pokazać jak się poprawnie powinno alokować pamięć w C++

Może i chciałeś zabłysnąć ale nic z tego nie wyszło
DerSchmetterlig
Użytkownik
Użytkownik
Posty: 18
Rejestracja: 25 gru 2007, o 21:56
Płeć: Mężczyzna
Lokalizacja: Gniezno
Podziękował: 1 raz
Pomógł: 1 raz

Liczby pierwsze C++

Post autor: DerSchmetterlig »

Zabłysnąć nie za bardzo bo przed Tobą i tak jestem malutki :[

A Ty jedyne co zrobiłeś to "popisałeś" się przed kimś kto zrobił błąd, ale nie pomogłeś autorowi tematu
Awatar użytkownika
Undre
Użytkownik
Użytkownik
Posty: 1430
Rejestracja: 15 lis 2004, o 02:05
Płeć: Mężczyzna
Lokalizacja:
Podziękował: 3 razy
Pomógł: 92 razy

Liczby pierwsze C++

Post autor: Undre »

Rafal88K pisze:Może i chciałeś zabłysnąć ale nic z tego nie wyszło
Przyganiał kocioł garnkowi
Rafal88K
Użytkownik
Użytkownik
Posty: 311
Rejestracja: 15 mar 2007, o 16:52
Płeć: Mężczyzna
Lokalizacja: Lublin
Podziękował: 28 razy
Pomógł: 54 razy

Liczby pierwsze C++

Post autor: Rafal88K »

DerSchmetterlig pisze: A Ty jedyne co zrobiłeś to "popisałeś" się przed kimś kto zrobił błąd, ale nie pomogłeś autorowi tematu
Autorowi tematu nie musiałem pomagać bo pomógł mu 1983, a ja tylko chciałem powiedzieć, że w tym programie źle zrobiona jest dynamiczna alokacja tablicy.

DerSchmetterlig zanim napiszesz odpowiedź na post to dokładnie przeczytaj i zastanów się co autor miał na myśli
Xitami

Liczby pierwsze C++

Post autor: Xitami »

Kod: Zaznacz cały

   for(int i=0;i<e;i++) l[i]=1;
   for(int i=2;i<f;i++) // sito
     if(l[i]) for(int j=i+i;j<e;j+=i) l[j]=0;
zero i jeden nie są liczbami pierwszymi, ale to drobiazg.
bardzo prosto da się to zrobić dowcipniej (szybciej).
Rafal88K
Użytkownik
Użytkownik
Posty: 311
Rejestracja: 15 mar 2007, o 16:52
Płeć: Mężczyzna
Lokalizacja: Lublin
Podziękował: 28 razy
Pomógł: 54 razy

Liczby pierwsze C++

Post autor: Rafal88K »

Jeszcze lepiej zrobić tak:

Kod: Zaznacz cały

unsigned int i, j, pierwiastek;
pierwiastek = static_cast<unsigned int>(sqrt(static_cast<double>(e)));
for(i = 2; i <= e; ++i) l[i] = true;
for(i = 2; i <= pierwiastek; ++i)
{
    if(l[i])
    {
        for(j = i * i; j <= e; j += i)
        {
            l[j] = false;
        }
    }
}
Pisane bez testowania (bez kompilatora) więc mogą być literówki
ODPOWIEDZ