【问题标题】:Project Euler 3 on PythonPython 上的 Euler 3 项目
【发布时间】:2020-10-30 08:11:30
【问题描述】:

我正在考虑关于 Project Euler 的 3rd problem。我已经有了解决方案,但它太长了。


这是我的代码:

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)

如何在 Python 中处理像 600581475143 这样的长数字?

【问题讨论】:

  • Python 有无限精度整数。确切的问题是什么?

标签: python


【解决方案1】:

给你:

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

`

【讨论】:

  • 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(2, int(number / 2)): if check_prime_number(divisor) and number % divisor == 0: number /= divisor print(divisor) find_divisors(600851475143)
  • 输出:71, 839, 1471, 6857.
  • @MarK 您粘贴的代码与帖子中的代码相对应。我们的方法不同。您正在检查一半的值。我正在检查 sqare root 的值。此外,除法检查只涉及检查素数。
  • @MarK 偶数不能是素数。所以,看看循环的索引。
  • 但它是否将71, 839, 1471 6857 输出视为解决方案?(゚ヮ゚)
猜你喜欢
  • 2012-11-10
  • 2019-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-11
  • 1970-01-01
相关资源
最近更新 更多