Python Asal Sayı Bulma

Arkadaşlar asal sayı bulmak için kod yazdım fakat asal olmayan bazı sayıları da asal diyor hatam nerde olabilir bulamadım.

Emin değilim ama breakle kırsan dahi for döngüsü birini çalıştırıyor ne gelirse.

Bunun yerine şöyle yapabilirisin.

EDIT : Düzgün anlatamamışım. iki if içindeki herhangi bir break komutu, for döngüsünü de kırıyor. Yani for sadece bir kez çalışıyor. For un altına bir print koyarak bir kez çalıştığını kendin de görebilirsin.

5 Beğeni

Eratosten Eleğini araştırınız.
“Sieve of Eratosthenes”

2 Beğeni

while True:
    sayi = int(input("Sorgulamak İstediğiniz Sayıyı Girin : "))
    for i in range(2,sayi):
        if sayi % i == 0:
            print("Sayı Asal Değil")
            break
    else:
            print("Sayı Asal")
""" 
Bu kısım(else) for yapısına bağlı olmak zorunda. Senin Kodun da if 
yapısına bağlı. Bunun yüzünden asal diyor. For yapısından çıkmıyor ve
tekrar bakıyor. 2 kere yazdırıyor.
"""
        

3 Beğeni

Çok ilginç ve güzel bir yaklaşım olmuş. Elinize sağlık.

İf ve else aynı scope (kapsamda) olmadan nasıl çalışabilir diye düşünüyordum.

2 Beğeni

For yapısından çıkmama durumundan emin olamadım.

while True:
    sayi = int(input("Sorgulamak İstediğiniz Sayıyı Girin : "))
    for i in range(2,sayi):
        print(sayi)
        if sayi % i == 0:
            print("Sayı Asal Değil")
            break
        else:
            print("Sayı Asal")
            break

Şeklinde derleyiciye verdim kodu.

Sadece print ekledim. Ki for u kaç kez döndürüyor merak ettim.

Sonuç:

Yani if else bloğunda her halukarda break ile for döngüsünden ilk seferde çıkıyor.

Bu nedenle For yapısından çıkmıyor ve tekrar bakıyor 2 kere yazdırıyor kısmını anlayamadım.

Çözüme itirazım yok, daha önce belirttim güzel bir çözüm ama sorun sizin söylediğiniz gibi mi emin olamadım.

Aslında for un bütün ihtimallerini denedikten sonra döngüyü kırması gerekirken ilk if ile for döngüsünü bir kez çalıştırıp durduruyor.

EDIT:

For altında if koşulunda ve else koşulunda hangisine geçerse break ile kırmak sadece bir kez for çalışmasına neden oluyorsa nasıl basitleştirebilirim diye baktım. Aslında else gerek yok.

Çünkü asal olması için kendisinden başka sayıya bölünmemesi gerektiğine göre herhangi bir bölen olduğu an döngüyü kırması yeterli.

İlk değeri asal kabul edip, döngüde bölen kontrolü yapmak yeterli.

while True:
    sayi = int(input("Sorgulamak İstediğiniz Sayıyı Girin : "))
    sonuc = 'Say Asal'
    for i in range(2,sayi):
        if sayi % i == 0:
            sonuc= 'Sayı Asal Değil'
            break
    print (sonuc)

Tabi bakış açısı bir şeyin tabi ki birden farklı çözüm yolları vardır. Ben sadece hatanın oluş nedenlerini irdelemeye çalışıyorum.

1 Beğeni
def prime_eratosthenes(n):
    prime_list = []
    for i in range(2, n+1):
        if i not in prime_list:
            print (i)
            for j in range(i*i, n+1, i):
                prime_list.append(j)

print(prime_eratosthenes(100));

Python: Sieve of Eratosthenes method, for computing prime number - w3resource

Iterasyon sayısını azaltmak için gayet mantıklı bir yaklaşım.

Madem değinmişsiniz bir örnek bulunsun istedim.

1 Beğeni