Belirtilen aralıktaki asal sayıları bulmak

Belirtilen aralıktaki asal sayıları bulan bir program yazmaya çalışıyorum.

import numpy as np


start = int(input("İlk sayı:"))

end = int(input("İkinci sayı:"))

a = start
sayilar = np.arange(2,a)
kalanlar = np.remainder(a,sayilar)
while True:    
    for i in kalanlar:
        if i != 0:
            print(a)
            sayilar = np.append(sayilar,a)
            
            a += 1
            continue
        elif i == 0:
            sayilar = np.append(sayilar,a)
            
            a += 1
            continue
        
    if a == end:
        break

sayilar arrayi her zaman güncelleniyor ancak kalanlar ilk girdiğim sayıyla kalıyor örneğin:
Sayılar arrayi inputlar 5-17 iken

 array([ 2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16])

ancak kalanlar direkt sayıların ilk halini alıyor yani [2,3,4]

array([1, 2, 1]

kalanları nasıl güncelleyebilirim?

sympy modülüyle belirtilen bir aralıktaki asal sayıları hızlıca bulabilirsiniz.

import sympy

print(*sympy.primerange(10, 20)
# [11, 13, 17, 19]

Modül kullanmadan da şöyle yapabilirsiniz:

is_prime = lambda x: False if x < 2 \
    else all(x % i != 0 for i in range(2, x))
    
primerange = lambda start, end: list(
    filter(lambda i: is_prime(i), range(start, end))
)

print(primerange(10, 20))
# [11, 13, 17, 19]
1 Beğeni

Çok teşekkür ederim, peki kendi yazdığım şekilde nasıl devam ettireceğimi biliyor musun?

Dostum ne yapmaya çalıştığınızı pek anlamadım ki orada.

Mesela i hem 0'a eşit olunca hem de eşit olmayınca aynı işlemler yapılıyor. Farklı olarak bir tek i 0’a eşit olmadığı zaman print fonksiyonu devreye giriyor.

Altta, if a == end diye bir durum oluşursa döngüden çıkılsın demişsiniz ama a'nın değeri for döngüsünü tamamladığında 18 oluyor, alttaki if a == end satırı ilk seferde atlanıyor. İkinci seferde de a'nın değeri for döngüsünün içinde 26'ya yükseltiliyor. Dolayısıyla sizin break komutu bu şartlar altında hiç bir zaman çalışmayacaktır.

2 Beğeni

Şöyle alternatif bir kod işinizi görür aslında.

start = int(input("İlk sayı:"))
end = int(input("İkinci sayı:"))

for i in range(start, end):
    for j in range(2, i):
        if i % j == 0:
            break
    else:
        print(i)
1 Beğeni

Sağ olun hocam, kendim yaratayım demiştim de program mantıken çok saçma bir şekilde çalışacaktı. Sizin verdiğiniz en iyisiydi

a'yi degistirdiginde kalanlar'i da degistirmen lazim. kalanlar'i loop’un disinda set ettigin icin degeri hic bir zaman degismiyor.

Genel olarak bir değişkenin loop içinde mi yoksa dışında mı olacağını nasıl anlayabilirim? A değişkeni de mi içte olacak? Teşekkürler

Bir degisken loop disinda kullanilacaksa loop disinda, sadece icinde kullanilacaksa loop icinde olmali.

Genel olarak her sey icin gecerli: Kullanilacagi en kucuk yerde tanimlanmali.

2 Beğeni