Python Python Project EU üzerinden çözerken yazılan kodlar tepki vermiyor

gLadio1

Decapat
Katılım
24 Haziran 2021
Mesajlar
269
Daha fazla  
Cinsiyet
Erkek
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.
 

Dosya Ekleri

  • Screenshot (57).png
    Screenshot (57).png
    246 KB · Görüntüleme: 13
  • Screenshot (58).png
    Screenshot (58).png
    240,5 KB · Görüntüleme: 11
Son düzenleyen: Moderatör:
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?
 
Son düzenleme:
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?
Kod:
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?
Yazabilir misiniz? Tam olarak anlayamadım.
 
Kod:
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))


Yazabilir misiniz? Tam olarak anlayamadım.
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.
 
Son düzenleme:
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.
Teşekkürler hocam. Daha tam olarak öğrenmedim python'u. " sum" fonksiyonunu görmedim daha önce.
 

Yeni konular

Geri
Yukarı