Subscribe:
  • Tulisan

    Sedikit kutipan catatan kecil yang semoga bisa meng-inspirasi anda.

  • Belajar

    Berbagi itu indah.
    Sedikit berbagi tentang ilmu yang saya ketahui.

  • My Game

    Game favorit saya dan para gamers semua. :D

Rabu, 03 Oktober 2012

Sieve Of Atkin di C++

Sebuah populasi Extreme Programmer dan Deadliner dimana akan mengerjakan 3 program sederhana menggunakan 3 algoritma pengecekan bilangan prima berbeda berakhir dengan menyedihkan. Hhahaha.. #LOL.

Tugas1 matkul Kryptography di lewati begitu saja dengan sia-sia. Kasian semua teman awak yang udah ngumpul di Habitat Pasar Merah menteng. Wkwkwk..... (termasuk saya sendiri :D)

Menggunakan bahasa Pemrograman masing2 yang beranggotakan Si Nanda Naga Langit dengan fitur JS nya, Mhd Barkah Akbar yang gayanya menggunakan VB (terlalu berlebihan Hahaha... :D), dan Nazar Wie serta saya sendiri yang hanya menggunakan C++.


Program, penjelasan algoritma, cara eksekusi yang telah selesai disusun rapi di dalam word office menjadi sia-sia ketika membuka E-Learning dan melihat Textbox dan Button Upload telah hilang dari peredaran, bisa di bilang waktu pengumpulan tugas ditutup. satu kata "Pupus" XD Hahaha.... LOL
Berikut codingnya, cekidot...

#include <iostream>
#include <cmath>
#include <fstream>

using namespace std;
int main (int argc, char* argv[])
{
//Membuat Variabel berbeda yang diperlukan
int limit = 400000;
int root = ceil(sqrt(limit));
bool sieve[limit];
int primes[(limit/2)+1];
int insert = 2;
primes[0] = 2;
primes[1] = 3;
int data;
bool pri=false;
for (int z = 0; z < limit; z++) sieve[z] = false; //memberikan status kompiler
for (int x = 1; x <= root; x++)
{
for (int y = 1; y <= root; y++)
{
//Main part of Sieve of Atkin
int n = (4*x*x)+(y*y);
if (n <= limit && (n % 12 == 1 || n % 12 == 5)) sieve[n] ^= true;
n = (3*x*x)+(y*y);
if (n <= limit && n % 12 == 7) sieve[n] ^= true;
n = (3*x*x)-(y*y);
if (x > y && n <= limit && n % 12 == 11) sieve[n] ^= true;
}
}
//Tandai semua Kelipatan
for (int r = 5; r <= root; r++) if (sieve[r]) for (int i = r*r; i < limit; i += r*r) sieve[i] = false;

cout<<"Input Bilangan = "; cin>>data;
//Add into prime array
for (int a = 5; a < limit; a++)
{
    if (sieve[a])
    {
       primes[insert] = a;
       insert++;
    }
}
 for(int i=0; i<=insert; i++)
 {
         if(primes[i]==data) {pri=true; break;}
 }
 if(pri)cout<<"\n"<< data <<" adalah bilangan prima  \n\n";
 else cout<<"\n"<< data <<" bukan bilangan prima  \n\n";

system("pause");
return 0;
}




Semoga Bermanfaat.. :D

0 komentar:

Posting Komentar