Python ile asal sayıları listeleme

Soru

Merhaba,

Project Euler 7. soru için bir çözüm arıyorum.

By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13.
What is the 10 001st prime number?

6. asalı gayet güzel bir şekilde veriyor fakat iş 10,001. sayıya gelince yanlış hesap çıkıyor. Nerede hata var ?

 

Cevaplandı 0
Genel Ömer 5 ay 8 Cevaplar 425 görüntüleme Kalfa 1

Hakkında ÖmerKalfa

Cevaplar ( 8 )

  1. Hocam asal sayıları bulma algoritmanız yanlış bu algoritmaya göre tek sayıların kareleri asal çıkar.
    Kareköküne kadar ki sayılara bölmeyi deneyin

    def asal(kaca_kadar):
    “””Asal sayı bulan fonksiyon
    Girdi olarak bir sayı alır
    Bu sayıya kadar olan asal sayıları ekrana basar.
    “””
    asallar = [2]
    if kaca_kadar < 2:
    return None
    elif kaca_kadar == 2:
    return asallar
    else:
    for i in range(3,kaca_kadar,2):
    bolundu = False
    # karekökün aşağı yuvarlanma ihtimaline karşı, + 1 ekliyoruz.
    limit = (i ** 0.5) + 1
    for j in asallar:
    if i % j == 0:
    bolundu=True
    break
    if j > limit:
    break
    if bolundu == False:
    asallar.append(i)
    return asallar

  2. Basit bir örnek vereyim;

    Bu durumda örnek çıktı şöyle olur ;

    Senin kodundaki hataya gelirsek;

    • 2,3,5,7 bölünmeyen sayılar diye almaya çalışmısın ama asıl doğru olan 1 veya kendisi dışındaki sayılara bölünmeyen olucak. Çünkü bu durmda 8,11,22,33… gibi sayıları işe dahil etmemişsin.
    • Döngün doğru çalışmıyor son sayıyı alıyor, listelemiyor.
    En iyi cevap
    • Yardımınız için teşekkürler.

      Set komutunu araştırdım biraz da anladığım kadarıyla belirli bir düzene sokuyor.
      Pop komutu da sondan saymaya başlıyor.  list[0] mantığının tersi.
      difference_update kodunu anlayamadım. Bu kodu çıkarttığımda sadece sayıyor. Açıklayabilir misiniz ?

      Asal mantığını kod üzerine dökemiyorum nedense.

      • Bu işlemler aslında matematik’de gördüğümüz küme, kartezyen vb. konuların birebiridir.

        difference_update() : Kümedeki S(A/B) işlemine denktir.

        Örneğin;

        Buradaki “-” ifade, difference_update fonksiyonuna denk geliyor. Hatta hemen, kanıtlamak adına deniyelim 🙂

        Yine, asal sayıları listeler fakat karışık sıralayacağı için “sorted()” fonksiyonunu kullandım.

        SET fonksiyonu biraz kafanı kurcalayabilir , sana bir kaynak atıcam baştan sonra okuyup uyguladığında olayı çok basit şekilde kavrarsın.

        Kaynak : https://www.programiz.com/python-programming/set

         

        • Verdiğiniz kaynağı inceledim biraz daha oturdu kafamda şuan, teşekkürler. Programlama da gerçekten çoğunlukla matematik üzerine, belki de tamamen 🙂

          Sıradaki soruya geçmeliyim artık sanırım.
          Bu arada; Merak eden arkadaşlar, linke direkt tıklayınca açılmıyor nedense, adresi kopyalayıp açabilirsiniz.

  3. Şöyle birşeyi 1 den 100 e kadar test ettim çalıştı.

     

Cevap bırak

Captcha Captcha güncellemek için resime tıkla