Liczby pierwsze C++
-
- 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++
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...
"Program wypisujący liczby pierwsze ze zbioru {1,2,3,...,n} (n podaje użytkownik)"
Pogubilem sie troche w petlach...
-
- 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++
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;
}
-
- 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++
Przykro mi al Twój program jest źle napisany
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.
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;
}
-
- 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++
Rafal88K Jak dla mnie to Twój program podaje wszystkie liczby od 1 do podanej, a nie tylko liczby pierwsze
-
- 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++
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
Może i chciałeś zabłysnąć ale nic z tego nie wyszło
-
- 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++
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
A Ty jedyne co zrobiłeś to "popisałeś" się przed kimś kto zrobił błąd, ale nie pomogłeś autorowi tematu
-
- 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++
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 pisze: A Ty jedyne co zrobiłeś to "popisałeś" się przed kimś kto zrobił błąd, ale nie pomogłeś autorowi tematu
DerSchmetterlig zanim napiszesz odpowiedź na post to dokładnie przeczytaj i zastanów się co autor miał na myśli
Liczby pierwsze C++
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;
bardzo prosto da się to zrobić dowcipniej (szybciej).
-
- 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++
Jeszcze lepiej zrobić tak:
Pisane bez testowania (bez kompilatora) więc mogą być literówki
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;
}
}
}