Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-素数表现不好_Python_Modulus - Fatal编程技术网

Python-素数表现不好

Python-素数表现不好,python,modulus,Python,Modulus,我正在写一个素数程序,我想得到一个提示,它现在打印素数,除了从9和15开始可以被3和5整除的数字,但不知何故准确地计算出20,也是5的倍数,作为非素数。谢谢你的帮助。使用Python2是因为我在一个没有网络连接的旧Vaio上 def main(): nums = [2] dividend = 3 while i < 30: if dividend % nuns[i] > 0: print divided, 'i

我正在写一个素数程序,我想得到一个提示,它现在打印素数,除了从9和15开始可以被3和5整除的数字,但不知何故准确地计算出20,也是5的倍数,作为非素数。谢谢你的帮助。使用Python2是因为我在一个没有网络连接的旧Vaio上

def main():
    nums = [2]
    dividend = 3

    while i < 30:
        if dividend % nuns[i] > 0:
                print divided, 'is prime'
                nums.append(dividend)
                dividend = dividend + 1
       if dividend % nums[i] == 0:
                print divided, 'is not prime'
                nums.append(dividend)
                dividend = dividend + 1
       i = i + 1
main()
def main():
nums=[2]
股息=3
当我<30时:
如果股息%nuns[i]>0:
打印分割为“是素数”
追加(股息)
股息=股息+1
如果股息%nums[i]==0:
打印分割,“不是素数”
追加(股息)
股息=股息+1
i=i+1
main()
我假设你想要第一个,甚至得到2作为素数。不必费心模运算,只需检查输入是否为2,然后编写代码检查其余部分

编辑:以下代码将找到给定范围内的所有素数,并将它们附加到名为
primes
的列表中。在Pyhton 3中,但唯一需要更改的是打印语句:

primes = []

def is_prime(num):
    if num == 1:
        return False
    if num == 2:
        return True
    for i in range(2, num):
        if num % i == 0:
            return False
    return True

for i in range(1, 31):
    if is_prime(i):
        print(str(i) + " is prime.")
        primes.append(i)
    else:
        print(str(i) + " is not prime.")

print("primes = " str(primes))
输出:

1 is not prime.
2 is prime.
3 is prime.
4 is not prime.
5 is prime.
6 is not prime.
7 is prime.
8 is not prime.
9 is not prime.
10 is not prime.
11 is prime.
12 is not prime.
13 is prime.
14 is not prime.
15 is not prime.
16 is not prime.
17 is prime.
18 is not prime.
19 is prime.
20 is not prime.
21 is not prime.
22 is not prime.
23 is prime.
24 is not prime.
25 is not prime.
26 is not prime.
27 is not prime.
28 is not prime.
29 is prime.
30 is not prime.
primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]

您的代码不起作用,因为您只检查
红利
是否可被
nums
中的第i个数字整除。你需要检查它是否可以被前面的素数整除。(在代码的逻辑中还有其他问题-它在每个循环中检查两次素数,这恰好使它看起来可能有一半工作,而实际上它根本不工作…)

要做到这一点,您需要使用嵌套循环-演示了如何使用嵌套的
for
循环准确地解决此问题

或者,使用具有列表理解的函数替换内部循环

def get_primes(max):
    """ Prints all prime numbers between 3 and max """
    primes = [2]
    for n in range(3, max + 1):
        if any(n % p == 0 for p in primes):
            print n, "is not prime"
        else:
            print n, "is prime"  
            primes.append(n)

get_primes(30)

请显示您的实际代码,并描述其中哪些部分没有按照您的预期工作。从您的编辑:我知道这很糟糕,但实际上,如果我们看不到代码中的错误,我们将无法在代码中找到它。在我听来,您好像在更新列表,同时在for循环中循环该列表。不要这样做。这段代码有很多bug阻止它运行,很难弄清楚你想做什么。如果你有运行的代码,请张贴。或者解释这是如何工作的。我确实输入了一个“nun”而不是“num”,但我想让它运行的方式是将一个数字n除以前面的每个数字n-1,然后使用模运算器测试余数以预测素数列表。正如代码所示,除了一些可以被3和5整除的数字外,它会吐出素数。谢谢。您可以将主循环简化为
primes=filter(is_prime,range(1,31))
@BurhanKhalid谢谢您的提示!我只是在学习自己,还没有太多关于
filter()
的经验,但是谢谢你告诉我这一点。看起来很有用。我希望在写我的答案之前就知道这个
any()
。谢谢你给我看。
def get_primes(max):
    """ Prints all prime numbers between 3 and max """
    primes = [2]
    for n in range(3, max + 1):
        if any(n % p == 0 for p in primes):
            print n, "is not prime"
        else:
            print n, "is prime"  
            primes.append(n)

get_primes(30)