Проект Эйлер 3 на Python - PullRequest
       0

Проект Эйлер 3 на Python

2 голосов
/ 09 июля 2020

Я думаю о третьей проблеме в Project Euler. У меня уже есть решение, но оно слишком длинное.


Вот мой код:

def check_prime_number(prime_number):

    for i in range(2, int(prime_number / 2)):
        
        if prime_number % i == 0:
            return False
            
    return True

def find_divisors(number):

    for divisor in range(int(number / 2), 2, -1):

        if check_prime_number(divisor) and number % divisor == 0:
            number /= divisor
            
            print(divisor)
            break

find_divisors(600851475143)

Как работать с длинными числами, например 600581475143 дюйм Python?

1 Ответ

0 голосов
/ 09 июля 2020

Здесь вы go:

def max_prime_divisor(limit):
    primes = [2]
    answer = None
    if limit % 2 == 0:
        answer = 2
    for i in range(3, int(limit ** .5) + 1, 2):
        inner_limit = int(i ** .5)
        is_prime = True
        for prime in primes:
            if prime > inner_limit:
                break
            if i % prime == 0:
                is_prime = False
                break
        if is_prime:
            primes.append(i)
            if limit % i == 0:
                answer = i
    return answer


print(max_prime_divisor(600851475143))

Вывод:

6857

`

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...