2016-03-27 17 views
0

Sorun 3'tür: 13195 arasındaprob. 3, Proje Euler proje Euler

ana faktörler 5, 7, 13 ve 29. sayısı 600.851.475.143 en büyük asal faktör nedir nelerdir? Ben buna farklı şekilde cevap çalıştı ve bu kodla ortaya çıktığında

n =600851475143 
i = 2 
while i * i < n: #square root law 
    while n % i == 0: #isolates factors 
     n = n/i 
i = i + 1 
print (n) 

Ancak:

def primes(n): 
    for i in range(2,int(n**.5)): 
     while n % i == 0: 
      n = n/i 
    print (n) 
primes(600851475143) 

ve benim konsol dönüyor Ben çalışan bir program yazdım

1.0 değeri. Yani, benim ana sorular şunlardır: Dünyada 1.0 :(iade edilen ve baş harfi arasındaki çok farklı olanı neden olurken ilk kodunda döngü ve hatalı kod döngü

Teşekkür

cevap

1
?!

Her şeyden önce, çalışma kodunuz tesadüfen çalışmaktadır. 75 gibi girdiyi deneyin ve başarısız olacaktır.Çözümdeki farklar şu şekildedir:

Süre döngü i * i < n durumunun durumu her yineleme işleminden sonra değerlendirilir. Hem i AND n hem de döngü gövdesinin içinde değişir .. Burada, hedef prime ulaştığınızda, i ve i, ve varsayalım n 5 ve döngü durur çünkü 25> = 5

Sen For döngüsü döngü her zaman aralığında belirlenen üst sınıra yineleme böylece aralık, başlangıçta yalnızca bir kez ayarlanır beri dolaşır kere daha. Burada, özetlenen durumumuzda: n = n/5, n, 1

+0

'a kadar yürütülecek, bu çok mantıklı! "Çalışma kodum" un 75 ile nasıl başarısız olduğuyla ilgili olarak, bir kare sayı geldiğinde işe yaramıyor mu? – Lowblow

İlgili konular