Python ile algoritma örnekleri serimizde ikinci örneğimiz Lasa sayı.
Lasa sayı nedir?
Lasa sayı, tersten yazıldığında da asal olan sayılara denir. Herhangi bir kullanım alanı olmadığı için evrensel bir terimle ifade edilmemiş ve asal kelimesinin tersten yazımıyla ifade edilmiştir.
Sorumuzda ise 10.000’e kadar kaç tane lasa sayı vardır bunu soruyoruz.
Çözüm:
Çözümümüzde öncelikle asal_kontrol isimli fonksiyonu tanımlıyoruz. Fonksiyonumuzda 2’den sayıya kadar olan sayıları, sayımıza bölüyoruz eğer sayımız tam bölünüyor ise false değerini döndürüyoruz bu da sayımızın asal olmadığı anlamına geliyor. Eğer bölünen sayı yok ise true değerini döndürüyoruz.
Ardından ters isimli fonksiyonumuzu tanımlıyoruz. Ters değişkenini sıfır olarak alıyoruz ilk başta. Sonrasında ise sayı 0’dan büyük olduğu müddetçe sırasıyla ters değişkenini 10 ile çarpıyoruz ve sayinin 10’da modunu ekliyoruz en sonunda ise sayımızı 10’a bölüyoruz. Buradaki amacımız sayının her bir basamağındaki elemanları alıp ters bir şekilde yazdırmak.
Fonksiyonlarımızı tanımladığımıza göre şimdi 10.000’e kadar bir for döngüsü kuruyoruz ve sayının kendisi ile tersinin asallığını kontrol ediyoruz.
def asal_kontrol(sayi): for i in range(2,sayi): if sayi%i==0: return False return True def ters(sayi): ters = 0 while sayi > 0: ters *= 10 ters += sayi % 10 sayi //= 10 return ters lasa_sayac = 0 for sayi in range(2,10000): if asal_kontrol(sayi) and asal_kontrol(ters(sayi)): lasa_sayac +=1 print(lasa_sayac)
Merhaba,
Şu asal sayı kontrol konusunda bir şey söylemek istiyorum. Okuduğum bütün kaynaklarda asallık kontrolü yaparken 2 den sayının kendisine kadar kontrol ettiriyor. Aslında sayının yarısına kadar kontrol edilmesi yeterli. Yarıdan sonra boşuna işlem yapılıyor kaynak ve zaman israfı. Örneğin 17 sayısı. Yarısı (tam sayı olarak) 9. 17 nin 9 dan büyük bir sayıya tam bölünmesi mümkün değil. Dolayısıyla 10 dan 17 ye kadar kontrol yapmanın bir anlamı yok.