ProjectEuler Çözümleri | Problem 2 | Python3

Bu durum için birşey değiştirmedi ama aklınızda ayırt edici bir değer var mı?

1 Beğeni

Evet bu durumda bir değişim yapmıyor ama tam kare sayılarda gerekli olduğunu söyleyebilirim.

1 Beğeni

@EkremDincel 5. soruyu yapabildiniz mi?

1 Beğeni
  1. soruyu yaptım ama biraz karışık oldu. Muhtemelen daha kısa bir yolu vardır ama bırakayım şuraya:
def prime_factors(num: int):
    divider = 2
    remaining = num
    while remaining != 1:
        while remaining % divider == 0:
            yield divider
            remaining /= divider
        divider += 1


def smallest_multiple(nums: list):
    result = []
    for num in nums:
        new_primes = list(prime_factors(num))

        for prime in set(new_primes):
            count = min(new_primes.count(prime), result.count(prime))
            for _ in range(count):
                result.remove(prime)
        
        result += new_primes
    return result


def product(nums: list):
    result = 1
    for num in nums:
        result *= num
    return result


numbers = range(1, 21)
factors = smallest_multiple(numbers)
multiple = product(factors)

print(multiple)
1 Beğeni
main = print $
  sum $ filter even $ takeWhile (<= 4000000) fib
  where
    fib = 1 : 1 : zipWith (+) fib (tail fib)
1 Beğeni

Ben onu haberim olmadan burada çözmüşüm:

1 Beğeni

@aib bunu hangi programlama dili ile yazdınız?

1 Beğeni

Haskell.

1 Beğeni

hocam bu algoritma işlemcim hızlı olsaydı beni sonuca götürür müydü? 3. problem için.

sayi = 600851475143
for i in range(1,sayi):
    while True:
        if sayi %i == 0:
            print(i)
            break

Sonuç ekrana yazılan sayı mı olacak?

dediğiniz gibi aynen öyle.

Ama ekrana bir sürü sayı yazılıyor?

1 Beğeni

En son yazılan sayı en büyük asal çarpanı olmuyor mu?

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.