Kodlarınızı fotoğraf olarak değil de metin olarak (``` arasına alarak tabii) atmanız daha iyi olur. Bir de çözdüğünüz her soru için yeni bir konu açmanız hoş olmaz.
Sizin ilk konunuzu görünce benim de başlayasım geldi:
def fibonacci(i):
x = 1
y = 0
z = 0
while i > x:
z = y
y = x
x = y + z
yield x
sum_of = 0
for i in fibonacci(4000000):
if not i%2:
sum_of += i
print(sum_of)
Bir de kodunuzun sonundaki print(toplam + 2) bir sıkıntıya işaret ediyor, neden 2 ekliyoruz ki? Bu istisnayı ortadan kaldırmamız lazım.
Üçüncü soruyu çözecek hızlı bir algoritma oluşturmanız zor olabilir, ben şuraya bir tane bırakıyım:
def find_largest_prime_factor(n):
i = 2
while i * i <= n:
while not n % i:
n //= i
if i * i > n:
break
i += 1
return n
print(find_largest_prime_factor(600851475143))
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)