Bu durum için birşey değiştirmedi ama aklınızda ayırt edici bir değer var mı?
Evet bu durumda bir değişim yapmıyor ama tam kare sayılarda gerekli olduğunu söyleyebilirim.
- 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)
main = print $
sum $ filter even $ takeWhile (<= 4000000) fib
where
fib = 1 : 1 : zipWith (+) fib (tail fib)
Ben onu haberim olmadan burada çözmüşüm:
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?
En son yazılan sayı en büyük asal çarpanı olmuyor mu?
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.