Döngünüzün hiç bitmiyor, bir hatanız var.
düzenledim hatayı yeni kod şu şekilde
sayi = 600851475143
for i in range(1,sayi):
while True:
if sayi %i == 0:
print(i)
break
else:
break
Yazılan sayı her zaman asal olmuyor ama.
While girerken elediğiniz için bidaha yazmaya gerek yok gibi geldi banada
Siz farkında değilsiniz ama biz burada ordan bir kaç soruyu beraber çözdük burada
Aslında o şu algoritmanın biraz daha uzatılmış hali (ama daha hızlı), o yüzden gerek var:
def find_largest_prime_factor(n):
i = 2
while i < n:
if not n % i:
n //= i
else:
i += 1
return i
Evet, çözmeye başlayınca fark ettim Ama sorunun kaynağını söylemeyince daha rahat çözülüyor.
Şunu demek istedim if bloğu gereksiz onu çıkarsak daha hızlı olur
if i * i > n:
break
Onu çıkarırsak fonksiyon düzgün çalışmaz (bazı sayılar için doğru sonuç veriyor olması bunu değiştirmez), neden birkaç sayı ile denemiyorsunuz?
Problem 3’ün çözümü için şöyle bi algoritma geliştirdim.
sayi = 600851475143
for i in range(1,sayi):
while sayi %i == 0:
sayi //= i
print(i)
break
100
sayısı için en son yazılan değer 10
ama?
Bilgisayar başında değilim soruyu okumamıştım okuyunca kodu daha iyi anladığımı düşünüyorum
Anladığıma göre i^2 den küçük bölen oldumu dur diyorsunuz birde bu algoritma sadece bölenleri veriyor galiba sonra bunlar arasından asalları seçicek
Hayır, return ettiği değer en büyük asal bölen.
Anladım şimdi algoritmanızı teşekkürler
Düzelttim o hatayı ve bu kodun son halidir.
sayi = 600851475143
for i in range(2,sayi):
while sayi %i == 0:
sayi //= i
if sayi %i != 0:
print(i)
break
Peki bu son yazılan sayıyı bir değişkene atamak isteseydiniz ne yapardınız?