Pythomn öğreniyorum şu sıralar. Project EU'ler üzerinden problem çözerken yazdığı kodlar ya hiç sonuç vermiyor ya da çok uzun sürede veriyor. Sayıların büyüklüğünden olduğunu tahmin ediyorum. Kodlarımda mı hata var yoksa tahmin ettiğim sebepten mi? Çözümünü de söylerseniz sevinirim.
Örneğin aşağıda 2 milyona kadar olan asal sayıların toplamını veren bir şey yazdım.
Resimlerden görebildiğim kadarıyla, x'e kadar bütün sayıları tek tek denemektense x'in karekökünden küçük sayıları deneyebilirsiniz. Bu fonksiyon, çok büyük sayılarda verimsiz olacaktır.
Ayrıca kodunuzu kod bloğu olarak atabilir misiniz?
Resimlerden görebildiğim kadarıyla, x'e kadar bütün sayıları tek tek denemektense x'in karekökünden küçük sayıları deneyebilirsiniz. Bu fonksiyon, çok büyük sayılarda verimsiz olacaktır.
Ayrıca kodunuzu kod bloğu olarak atabilir misiniz?
from functools import reduce
def asal_mi(x):
i = 2
if (x == 1):
return False
elif (x == 2):
return True
else:
while (i < x):
if (x % i == 0):
return False
i += 1
return True
t = 3
liste= [2]
while True:
if int(liste[-1]) >= 2000000:
break
else:
if asal_mi(t):
liste.append(t)
t +=1
print(reduce(lambda a,b : a+b ,liste))
Resimlerden görebildiğim kadarıyla, x'e kadar bütün sayıları tek tek denemektense x'in karekökünden küçük sayıları deneyebilirsiniz. Bu fonksiyon, çok büyük sayılarda verimsiz olacaktır.
Ayrıca kodunuzu kod bloğu olarak atabilir misiniz?
from functools import reduce
def asal_mi(x):
i = 2
if (x == 1):
return False
elif (x == 2):
return True
else:
while (i < x):
if (x % i == 0):
return False
i += 1
return True
t = 3
liste= [2]
while True:
if int(liste[-1]) >= 2000000:
break
else:
if asal_mi(t):
liste.append(t)
t +=1
print(reduce(lambda a,b : a+b ,liste))
Hocam liste kullanmanıza hiç gerek yok bence, bir while döngüsü ile daha temiz halledebilirsiniz. İlla liste kullanacaksanız reduce'a da gerek yok Python'da built-in bulunan sum fonksiyonu var zaten.
Bu tarz bir şey işinizi görür diye düşünüyorum:
Python:
s = 0
num = 2
while num < 2_000_000:
if asal_mi(num):
s += num
num += 1
Yine de dediğim gibi, x'e kadar tek tek bölmeyin. Muhtemelen bu yüzden tepki vermediğini düşündünüz, çünkü çok yavaş çalışıyor (Python'dan bağımsız yazıyorum.). Yeteri kadar zaman verirseniz bir şekilde program biter.
Hocam liste kullanmanıza hiç gerek yok bence, bir while döngüsü ile daha temiz halledebilirsiniz. İlla liste kullanacaksanız reduce'a da gerek yok Python'da built-in bulunan sum fonksiyonu var zaten.
Bu tarz bir şey işinizi görür diye düşünüyorum:
Python:
sum = 0
num = 2
while num < 2_000_000:
if asal_mi(num):
sum += num
num += 1
Yine de dediğim gibi, x'e kadar tek tek bölmeyin. Muhtemelen bu yüzden tepki vermediğini düşündünüz, çünkü çok yavaş çalışıyor (Python'dan bağımsız yazıyorum.). Yeteri kadar zaman verirseniz bir şekilde program biter.