Rabu, 24 November 2010

Segmented Sieve of Eratosthenes

    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;
}

1 komentar:

  1. kompleksitasny brp ni ya ? bukannya bkalan TLE untuk worst case 999900000 sampai 1000000000. akar sqrt(1000000000)*100000 melebihi 100jt operasi. atau saya salah ?

    BalasHapus