Eratosthenes Kalburu'nda Python & C++

โšก Akฤฑllฤฑ ร–zet

Eratosthenes Kalburu, bileลŸik sayฤฑlarฤฑ filtreleyen klasik bir asal sayฤฑ algoritmasฤฑdฤฑr; her asal sayฤฑnฤฑn katlarฤฑnฤฑ yinelemeli olarak iลŸaretleyerek, yalnฤฑzca seรงilen bir รผst sฤฑnฤฑr iรงindeki asal sayฤฑlarฤฑ hฤฑzlฤฑ arama iรงin bฤฑrakฤฑr.

  • ๐Ÿ”ข Ana dรผลŸรผnce: n'ye kadar olan asal sayฤฑlarฤฑ bulmak iรงin 2'den baลŸlayarak her asal sayฤฑnฤฑn katlarฤฑnฤฑ iลŸaretleyin.
  • ๐Ÿงฎ Dรถngรผ Sฤฑnฤฑrlamasฤฑ: Daha bรผyรผk รงarpanlar zaten elendiฤŸi iรงin yalnฤฑzca n'nin karekรถkรผne kadar yineleme yapฤฑn.
  • โšก Zaman KarmaลŸฤฑklฤฑฤŸฤฑ: Algoritma O(n log log n) zaman karmaลŸฤฑklฤฑฤŸฤฑnda รงalฤฑลŸฤฑr, bu da pratik aralฤฑklar iรงin neredeyse doฤŸrusaldฤฑr.
  • โœ… Bรถlmeli Elek: AralฤฑฤŸฤฑ bloklara bรถlmek, yardฤฑmcฤฑ bellek kullanฤฑmฤฑnฤฑ O(n)'den O(โˆšn)'ye dรผลŸรผrรผr.
  • ๐Ÿงช Kullanฤฑm Durumlarฤฑ: Kriptografi, karma fonksiyonlar, rekabetรงi programlama ve sayฤฑ teorisi, hฤฑzlฤฑ asal sayฤฑ รผretimine dayanฤฑr.

Eratosthenes Kalburu'nda Python

Eratosthenes Kalburu Nedir?

Eratosthenes Kalburu, en basit asal sayฤฑ kalburudur. Belirli bir sฤฑnฤฑr iรงindeki tรผm asal sayฤฑlarฤฑ bulmak iรงin kullanฤฑlan bir asal sayฤฑ algoritmasฤฑdฤฑr. Eratosthenes Kalburu, Atkin Kalburu ve Sundaram Kalburu dahil olmak รผzere รงeลŸitli asal sayฤฑ kalburlarฤฑ mevcuttur.

Kelime "elek"Elek" terimi, maddeleri filtreleyen bir aleti ifade eder. Aynฤฑ mantฤฑkla, elek algoritmasฤฑ da bu doฤŸrultudadฤฑr. Python ve diฤŸer diller, tamsayฤฑlar listesinden asal sayฤฑlarฤฑ ayฤฑklamak iรงin kullanฤฑlan bir yรถntemi ifade eder.

Bu algoritma, yinelemeli bir yaklaลŸฤฑm kullanarak asal sayฤฑlarฤฑ filtreler. Filtreleme iลŸlemi en kรผรงรผk asal sayฤฑdan baลŸlar. Asal sayฤฑ, 1'den bรผyรผk ve yalnฤฑzca iki bรถleni olan doฤŸal sayฤฑdฤฑr; bu bรถlenler 1 ve sayฤฑnฤฑn kendisidir. Numbers Asal olmayan sayฤฑlara bileลŸik sayฤฑlar denir.

Eratosthenes eleฤŸi neden kullanฤฑlฤฑr?

Eratosthenes Kalburu yรถnteminde, รถnce kรผรงรผk bir asal sayฤฑ seรงilir ve bu sayฤฑnฤฑn tรผm katlarฤฑ elenir. Bu iลŸlem, verilen bir aralฤฑkta dรถngรผ halinde รงalฤฑลŸarak, her aday รผzerinde deneme bรถlmesi yapmadan n'ye kadar olan tรผm asal sayฤฑlarฤฑ verimli bir ลŸekilde รผretir.

Bu yรถntem, asal sayฤฑlarฤฑ tek tek kontrol etmekten daha hฤฑzlฤฑ bir eleme yรถntemi sunar. Sayฤฑ teorisi, kriptografi, karma fonksiyonlar ve birรงok asal sayฤฑnฤฑn hฤฑzlฤฑ bir ลŸekilde รผretilmesi gereken rekabetรงi programlama gibi alanlarda yaygฤฑn olarak kullanฤฑlฤฑr.

ร–rneฤŸin:

2 ile 10 arasฤฑndaki sayฤฑ aralฤฑฤŸฤฑnฤฑ ele alalฤฑm.

Eratosthenes Algoritmasฤฑnฤฑn Sรผzรผlmesi

Eratosthenes Kalburu uygulandฤฑktan sonra, 2, 3, 5, 7 asal sayฤฑlarฤฑnฤฑn listesi elde edilecektir.

Eratosthenes Algoritmasฤฑnฤฑn Sรผzรผlmesi

Eratosthenes'in Algoritma EleฤŸi

ฤฐลŸte Eratosthenes EleฤŸinin algoritmasฤฑ:

) 1 Adฤฑm Verilen n aralฤฑฤŸฤฑndan baลŸlayarak 2'den itibaren sayฤฑlarฤฑn bir listesini oluลŸturun. En kรผรงรผk ve ilk asal sayฤฑ olduฤŸu iรงin 2 ile baลŸlฤฑyoruz.

) 2 Adฤฑm Listedeki en kรผรงรผk sayฤฑyฤฑ, x'i (baลŸlangฤฑรงta x 2'ye eลŸittir), seรงin, listeyi tarayฤฑn ve seรงilen sayฤฑnฤฑn tรผm katlarฤฑnฤฑ iลŸaretleyerek karลŸฤฑlฤฑk gelen bileลŸik sayฤฑlarฤฑ filtreleyin.

) 3 Adฤฑm Daha sonra listedeki bir sonraki asal sayฤฑyฤฑ veya iลŸaretlenmemiลŸ en kรผรงรผk sayฤฑyฤฑ seรงin ve 2. adฤฑmฤฑ tekrarlayฤฑn.

) 4 Adฤฑm x deฤŸeri n'nin karekรถkรผnden kรผรงรผk veya ona eลŸit olana kadar รถnceki adฤฑmฤฑ tekrarlayฤฑn (x<=Eratosthenes'in Algoritma EleฤŸi).

Not: Matematiksel mantฤฑk oldukรงa basittir. n sayฤฑ aralฤฑฤŸฤฑ ลŸu ลŸekilde รงarpanlarฤฑna ayrฤฑlabilir:

n = a * b

Yine n = Eratosthenes'in Algoritma EleฤŸi * Eratosthenes'in Algoritma EleฤŸi

= (faktรถr daha kรผรงรผk Eratosthenes'in Algoritma EleฤŸi) * (faktรถr ลŸundan bรผyรผk: Eratosthenes Algoritmasฤฑnฤฑn Sรผzรผlmesi)

Yani en az bir tanesi asal faktรถrler veya her ikisi de <= olmalฤฑdฤฑr Eratosthenes'in Algoritma EleฤŸiBu nedenle, yukarฤฑya doฤŸru ilerlemek Eratosthenes'in Algoritma EleฤŸi yeterli olacak.

) 5 Adฤฑm Bu dรถrt adฤฑmdan sonra, iลŸaretlenmemiลŸ kalan sayฤฑlar, verilen n aralฤฑฤŸฤฑndaki tรผm asal sayฤฑlar olacaktฤฑr.

Uygulamalฤฑ ร–rnek

ร–rnek:

Bir รถrnek รผzerinden nasฤฑl iลŸlediฤŸine bakalฤฑm.

Bu รถrnekte, 2'den 25'e kadar olan asal sayฤฑlarฤฑn listesini bulacaฤŸฤฑz. Yani, n = 25.

) 1 Adฤฑm ฤฐlk adฤฑmda, n = 25 seรงtiฤŸimiz iรงin 2'den 25'e kadar olan sayฤฑlarฤฑn bir listesini alacaฤŸฤฑz.

Eratosthenes'in Algoritma EleฤŸi

) 2 Adฤฑm Ardฤฑndan listedeki en kรผรงรผk sayฤฑyฤฑ, x'i seรงiyoruz. BaลŸlangฤฑรงta x = 2 รงรผnkรผ en kรผรงรผk asal sayฤฑdฤฑr. Daha sonra listeyi dolaลŸฤฑp 2'nin katlarฤฑnฤฑ iลŸaretliyoruz.

Verilen n deฤŸeri iรงin 2'nin katlarฤฑ ลŸunlardฤฑr: 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24.

Eratosthenes Algoritmasฤฑnฤฑn Sรผzรผlmesi

Not: Mavi renk seรงilen sayฤฑyฤฑ, pembe renk ise elenen katlarฤฑ gรถsterir.

) 3 Adฤฑm Daha sonra bir sonraki en kรผรงรผk iลŸaretsiz sayฤฑ olan 3'รผ seรงiyoruz ve 3'รผn katlarฤฑnฤฑ iลŸaretleyerek son adฤฑmฤฑ tekrarlฤฑyoruz.

Eratosthenes Algoritmasฤฑnฤฑn Sรผzรผlmesi

) 4 Adฤฑm x = olana kadar 3. adฤฑmฤฑ aynฤฑ ลŸekilde tekrarlฤฑyoruz. Eratosthenes Algoritmasฤฑnฤฑn Sรผzรผlmesi veya 5.

Eratosthenes Algoritmasฤฑnฤฑn Sรผzรผlmesi

) 5 Adฤฑm ฤฐลŸaretlenmemiลŸ kalan sayฤฑlar ise 2 ile 25 arasฤฑndaki asal sayฤฑlardฤฑr.

Eratosthenes Algoritmasฤฑnฤฑn Sรผzรผlmesi

yalancฤฑCode

AลŸaฤŸฤฑdaki sรถzde kod, Eratosthenes Kalburu'nun temel yapฤฑsฤฑnฤฑ, gerรงek koda รงevirmeden รถnce gรถstermektedir.

Begin
	Declare a boolean array of size n and initialize it to true
	For all numbers i : from 2 to sqrt(n)
     		IF bool value of i is true THEN
         			i is prime
         			For all multiples of i (i<n)
             			mark multiples of i as composite
Print all unmarked numbers
End

Eratostenes EleฤŸi C/C++ Code ร–rnek E-posta

AลŸaฤŸฤฑda eksiksiz bir liste bulunmaktadฤฑr. C++ Seรงilen bir รผst sฤฑnฤฑra kadar olan tรผm asal sayฤฑlarฤฑ yazdฤฑran Eratosthenes Kalburu'nun uygulanmasฤฑ.

#include <iostream>
#include <cstring>
using namespace std;
void Sieve_Of_Eratosthenes(int n)
{
    // Create and initialize a boolean array
    bool primeNumber[n + 1];
    memset(primeNumber, true, sizeof(primeNumber));
    for (int j = 2; j * j <= n; j++) {
        if (primeNumber[j] == true) {
            // Update all multiples of i as false
            for (int k = j * j; k <= n; k += j)
                primeNumber[k] = false;
        }
    }
    for (int i = 2; i <= n; i++)
        if (primeNumber[i])
            cout << i << " ";
}
int main()
{
    int n = 25;
    Sieve_Of_Eratosthenes(n);
    return 0;
}

ร‡ฤฑktฤฑ:

2 3 5 7 11 13 17 19 23

Eratosthenes Elekleri Python Program ร–rneฤŸi

AลŸaฤŸฤฑdaki Python Program, aynฤฑ algoritmayฤฑ bir boolean listesi ve bir while dรถngรผsรผ kullanarak uygular.

def SieveOfEratosthenes(n):
# Create a boolean array
	primeNumber = [True for i in range(n+2)]
	i = 2
	while (i * i <= n):
		if (primeNumber[i] == True):
			# Update all multiples of i as false
			for j in range(i * i, n+1, i):
				primeNumber[j] = False
		i += 1
	for i in range(2, n):
		if primeNumber[i]:
			print(i)
n = 25
SieveOfEratosthenes(n)

ร‡ฤฑktฤฑ:

2
3
5
7
11
13
17
19
23

Parรงalฤฑ Elek

Eratosthenes Kalburu'nun tรผm sayฤฑ aralฤฑฤŸฤฑ boyunca bir dรถngรผ รงalฤฑลŸtฤฑrdฤฑฤŸฤฑnฤฑ gรถrdรผk. Bu nedenle, sayฤฑlarฤฑ depolamak iรงin O(n) bellek alanฤฑna ihtiyaรง duyar. ร‡ok bรผyรผk bir aralฤฑkta asal sayฤฑlarฤฑ bulmaya รงalฤฑลŸtฤฑฤŸฤฑmฤฑzda durum karmaลŸฤฑklaลŸฤฑr, รงรผnkรผ daha bรผyรผk bir n iรงin bu kadar bรผyรผk bir bellek bloฤŸu ayฤฑrmak mรผmkรผn deฤŸildir.

Algoritma bazฤฑ yeni รถzellikler eklenerek optimize edilebilir. Fikir, sayฤฑ aralฤฑฤŸฤฑnฤฑ daha kรผรงรผk parรงalara bรถlmek ve bu parรงalardaki asal sayฤฑlarฤฑ tek tek hesaplamaktฤฑr. Bu, alan karmaลŸฤฑklฤฑฤŸฤฑnฤฑ azaltmanฤฑn etkili bir yoludur. Bu yรถnteme bir bรถlรผmlรผ elek.

Optimizasyon aลŸaฤŸฤฑdaki ลŸekilde saฤŸlanabilir:

  1. 2'den XNUMX'ye kadar asal sayฤฑlarฤฑ bulmak iรงin basit bir elek kullanฤฑn Parรงalฤฑ Elek ve bunlarฤฑ bir dizide saklayฤฑn.
  2. [0โ€ฆn-1] aralฤฑฤŸฤฑnฤฑ en fazla birden fazla boyut segmentine bรถlรผn Parรงalฤฑ Elek.
  3. Her bir segment iรงin, segmenti yineleyin ve 1. adฤฑmda bulunan asal sayฤฑlarฤฑn katlarฤฑnฤฑ iลŸaretleyin. Bu adฤฑm O( ) gerektirir.Parรงalฤฑ Elek) maksimum dรผzeyde.

Normal elek O(n) yardฤฑmcฤฑ bellek alanฤฑna ihtiyaรง duyarken, bรถlรผmlรผ elek O(Parรงalฤฑ ElekBu, bรผyรผk bir n iรงin รถnemli bir iyileลŸmedir. Ancak yรถntemin bir dezavantajฤฑ da vardฤฑr, รงรผnkรผ zaman karmaลŸฤฑklฤฑฤŸฤฑnฤฑ iyileลŸtirmez.

KarmaลŸฤฑklฤฑk Analizi

Hem alan hem de zaman karmaลŸฤฑklฤฑฤŸฤฑnฤฑ anlamak, belirli bir problem boyutu iรงin normal elek yรถntemi ile bรถlรผmlรผ elek yรถntemi arasฤฑnda seรงim yapmanฤฑza yardฤฑmcฤฑ olur.

Uzay KarmaลŸฤฑklฤฑฤŸฤฑ:

Basit Eratosthenes Kalburu algoritmasฤฑ O(n) bellek alanฤฑ gerektirir. Bรถlรผmlรผ kalbur ise O(KarmaลŸฤฑklฤฑk Analizi) yardฤฑmcฤฑ alan.

Zaman KarmaลŸฤฑklฤฑฤŸฤฑ:

Normal bir Eratosthenes Kalburu algoritmasฤฑnฤฑn zaman karmaลŸฤฑklฤฑฤŸฤฑ O(n*log(log(n)))'dir. Bu karmaลŸฤฑklฤฑฤŸฤฑn ardฤฑndaki mantฤฑk aลŸaฤŸฤฑda tartฤฑลŸฤฑlmaktadฤฑr.

Verilen bir n sayฤฑsฤฑ iรงin, bileลŸik bir sayฤฑyฤฑ (yani asal olmayan bir sayฤฑyฤฑ) iลŸaretlemek iรงin gereken sรผre sabittir. Dolayฤฑsฤฑyla, dรถngรผnรผn รงalฤฑลŸma sayฤฑsฤฑ ลŸuna eลŸittir:

n/2 + n/3 + n/5 + n/7 + โ€ฆโ€ฆโˆž

= n * (1/2 + 1/3 + 1/5 + 1/7 +โ€ฆโ€ฆ.โˆž)

Asal sayฤฑlarฤฑn toplamฤฑnฤฑn harmonik dizisi log(log(n)) olarak รงฤฑkarฤฑlabilir:

(1/2 + 1/3 + 1/5 + 1/7 +โ€ฆโ€ฆ.โˆž) = log(log(n))

Dolayฤฑsฤฑyla, zaman karmaลŸฤฑklฤฑฤŸฤฑ ลŸu ลŸekilde olacaktฤฑr:

T(n) = n * (1/2 + 1/3 + 1/5 + 1/7 + โ€ฆโ€ฆโˆž)

= n * log(log(n))

Dolayฤฑsฤฑyla zaman karmaลŸฤฑklฤฑฤŸฤฑ O(n * log(log(n)))'dir.

Sonraki bรถlรผmde ลŸunlarฤฑ รถฤŸreneceksiniz: Pascal รœรงgeni.

SSS

Herhangi bir bileลŸik sayฤฑ n, iki รงarpanฤฑn รงarpฤฑmฤฑ olarak yazฤฑlabilir ve รงarpanlardan en az biri n'nin karekรถkรผnden kรผรงรผk veya ona eลŸit olmalฤฑdฤฑr. Bu noktadan sonraki katlarฤฑ iลŸaretlemek gereksizdir รงรผnkรผ her bileลŸik sayฤฑ zaten elenmiลŸtir.

Normal elek, her sayฤฑyฤฑ iลŸaretlemek iรงin O(n) bellek ayฤฑrฤฑrken, bรถlรผmlรผ elek aralฤฑฤŸฤฑ โˆšn boyutunda bloklara bรถler ve belleฤŸi yeniden kullanฤฑr. n รงok bรผyรผk olduฤŸunda ve RAM sฤฑnฤฑrlฤฑ olduฤŸunda bรถlรผmlรผ sรผrรผm tercih edilir.

ฤฐลŸlem O(n log log n) zaman karmaลŸฤฑklฤฑฤŸฤฑnda gerรงekleลŸir ki bu neredeyse doฤŸrusaldฤฑr. On milyonun altฤฑndaki tรผm asal sayฤฑlarฤฑ รผretmek, modern bir dizรผstรผ bilgisayarda saniyenin รงok kรผรงรผk bir bรถlรผmรผnรผ alฤฑr; bu da eleme yรถntemini kรผรงรผk ve orta aralฤฑklar iรงin en hฤฑzlฤฑ pratik seรงenek haline getirir.

Modern yapay zeka hฤฑzlandฤฑrฤฑcฤฑlarฤฑ, GPU'lar ve TPU'lar รผzerinde eleme iลŸlemlerini paralelleลŸtirerek bรผyรผk asal sayฤฑ aramalarฤฑnฤฑ hฤฑzlandฤฑrฤฑr. Makine รถฤŸrenimi modelleri ayrฤฑca umut vadeden aday aralฤฑklarฤฑnฤฑ tahmin etmeye yardฤฑmcฤฑ olarak, RSA anahtar รผretiminde kullanฤฑlan Miller-Rabin ve diฤŸer asal sayฤฑ testlerinin iลŸ yรผkรผnรผ azaltฤฑr.

Evet. Yapay zekรข eฤŸitmenleri adฤฑm adฤฑm eฤŸitimler oluลŸturuyor. tracร–rneฤŸin, bileลŸik eleme iลŸlemini gรถrselleลŸtirir, tekerlek รงarpanlarฤฑna ayฤฑrma gibi optimizasyonlar รถnerir ve ispatlarฤฑ etkileลŸimli olarak aรงฤฑklar. ร–ฤŸrencilerin harmonik seri sฤฑnฤฑrlarฤฑ ve eleme yรถnteminin ardฤฑndaki karmaลŸฤฑklฤฑk argรผmanlarฤฑ konusunda sezgisel bir anlayฤฑลŸ geliลŸtirmelerine yardฤฑmcฤฑ olurlar.

Bu yazฤฑyฤฑ ลŸu ลŸekilde รถzetleyin: