Şöyle bir kod yazdım ama 600851475143 değerini girince sonuç çıkmıyor daha doğrusu işlem çok fazla uzun sürüyor.İyileştirmeler yapmaya çalıştım ama değişen bişe olmadı.
Yardımcı olabilir misiniz.
def asalmidir(a):
for i in range(2, a):
if i > (a / 2):
break
elif a % i == 0:
return False
return True
saki = int(input("sayiyi giriniz :"))
s1 = 0
for i in range(2, saki + 1):
if i < saki / 2 or i == saki:
if saki / 2 != 0 and saki % i == 0 and asalmidir(i):
s1 = i
print(s1)
işlemci, ram, hdd, ssd gibi bir çok faktöre bağlı olarak programın bunu hesaplama süresi uzun sürüyor. Aslında doğrusu şu bilgisayara öğretilen kadar sonuç bulursunuz. Windows’da hesap makinesini açtığınız zaman sonsuza kadar işlem yapamazsınız bir yerden sonra duracaktır. Bu da öyle bir şey. Maksimum hesaplayabildiği sayıdan daha yukarıda bir sayı çıkacaksa eğer bu işlemi belirli bir noktada sonlandırır.
Asal sayıyı, sayının yarısına kadar değil kareköküne kadar kontrol edin. Programınız biraz daha hızlı hesaplayacaktır. Ben de bu şekilde çözmüştüm.
# coding:utf-8
# @coderistan
# asal bölenlerin en büyüğünü bulmak
from math import sqrt
def next_prime(max_number):
for i in range(3,max_number):
if(i%2==0):
continue
else:
find=True
for k in range(3,int(sqrt(i))):
if(i%k==0):
find=False
break
if(find):
yield i
def hesapla(sayi):
asal = next_prime(max_number=10000)
result = 0
siradaki_asal=2
while(sayi>1):
if(sayi%siradaki_asal==0):
result = siradaki_asal if(siradaki_asal!=result and siradaki_asal>result) else result
sayi=sayi/siradaki_asal
else:
siradaki_asal=next(asal)
return result
print(hesapla(600851475143))