ProjectEuler Çözümleri | Problem 2 | Python3

Döngünüzün hiç bitmiyor, bir hatanız var.

1 Beğeni

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 :slight_smile:

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 :slight_smile: 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?

1 Beğeni

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?

1 Beğeni