Segmented Sieve of Eratosthenes adalah pengembangan dari Sieve of Eratosthenes, bila bilangan prima yang di cari tidak di mulai dari angka 0.
Contohnya "Tuliskan bilangan Prima dari 999900000 sampai 1000000000" coba bayangkan kompleksitas nya kalau harus mulai dari 0. XD.
Ini source code upgrade an Sieve of Eratosthenes" saya :D
#include <iostream>
#include <math.h>
typedef long long LL;
using namespace std;
LL N,M;
bool Prima[1000000000];
int main()
{
cout<<"Masukan angka minimal bilangan prima = ";cin>>N;
cout<<"Masukan angka maximal bilangan prima = ";cin>>M;
for(LL i=N;i<M;i++)
Prima[i] = true;
cout<<"Bilangan Prima dari "<<N<<" - "<<M<<" adalah : ";
Prima[0] = false;
Prima[1] = false;
for(LL i=2;i<sqrt(M);i++)
for(LL j=N;j<M;j++)
if(Prima[j] && ((j/i)*i == j))
{
j += i;
while(j < M)
{
if(Prima[j])
Prima[j] = false;
j += i;
}
}
for(int i=N;i<M;i++)
if(Prima[i])
cout<<i<<endl;
return 0;
}
Rabu, 24 November 2010
Segmented Sieve of Eratosthenes
Langganan:
Posting Komentar (Atom)
kompleksitasny brp ni ya ? bukannya bkalan TLE untuk worst case 999900000 sampai 1000000000. akar sqrt(1000000000)*100000 melebihi 100jt operasi. atau saya salah ?
BalasHapus