【问题标题】:Finding prime factors logic error python查找素数逻辑错误python
【发布时间】:2017-12-10 16:09:33
【问题描述】:

不知道为什么试图找到这样的主要因素不起作用:

primes= [2,3,5]
maximum = int(input("Highest number checked: "))
x = 2
prime = False
while x < maximum:
    y = len(primes)
    for n in range(2,y):
        if x % int(primes[n]) == 0:
            prime = True
        else:
            prime = False
            break
    if prime == True:
        primes.append(x)
    x = x+1

print(primes)

输入 30 打印 2,3,5,5,10,20

【问题讨论】:

  • 您想分享错误消息以便我们调查问题,还是您只是将此网站用作您的个人日记?
  • 我只是假设有人能够发现我的错误,抱歉?
  • 嗯,有人(可能)已经这样做了,但是如果您向我们提供完整的错误消息,那就容易多了。 “布尔错误”什么也没说。
  • 问题没有解决,我编辑了朋友
  • 当我阅读你的代码时,我发现我不确定你的程序应该做什么。您似乎已经预定义了一个很小的素数列表。您要检查的只有这些吗?这意味着您只能分解非常小的数字。

标签: python primes


【解决方案1】:

在这一行中 if x % int(prime[n]) == 0:prime 更改为 primes

【讨论】:

  • 即使有这个改变程序也不能工作,我输入 30 并返回 2,3,5,5,10,20
  • prime i bool 变量而不是列表。但你写素数[n]。这是不正确的
  • 您的问题是什么?请解释完整
  • 当我执行程序时,如果我输入最大值为 30,它应该给我一个素数列表,但它给我 2,3,5,5,10,20,它是当然错了,所以我一定有逻辑错误
  • 它的意思是给出素数,所以 30 将是 2,3,5
【解决方案2】:

不知道为什么试图找到这样的主要因素不起作用

它不起作用,因为您没有编写(损坏的)素因数查找程序,而是编写了(损坏的)素数查找程序。如果我们修复它并清理它,这应该更明显:

primes = [2, 3, 5]

maximum = int(input("Highest number checked: "))

x = 2

while x <= maximum:
    is_prime = True

    for prime in primes:
        if prime * prime > x:
            break

        if x % prime == 0:
            is_prime = False
            break

    if is_prime:
        primes.append(x)

    x = x + 1

print(primes)

用法

% python3 test.py
Highest number checked: 100
[2, 3, 5, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
%

这可以用作素因数查找程序的一部分,但仅靠它是不够的。您需要处理直到 N 的素数列表的某个子集,看看哪些素数是 N 的因数。没有比现在更多的代码。

【讨论】:

    猜你喜欢
    • 2014-02-17
    • 2011-03-31
    • 1970-01-01
    • 2020-06-25
    • 2021-08-20
    • 1970-01-01
    • 2015-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多