我的程序中的素数在一个范围内出了什么问题?

时间:2016-02-11 06:33:46

标签: python

要在范围程序中打印素数:

lower = int(input("Enter lower range: "))   
upper = int(input("Enter upper range: "))

for num in range(lower,upper + 1):

   # prime numbers are greater than 1

   if num > 1:

       for i in range(2,num):

           if (num % i) == 0:

               break
       else:
           print(num)

以上的输出是:

Enter lower range: 3
Enter upper range: 10

3
5
7

但是,当我尝试使用下面的代码时,输​​出会发生变化。

min=int(input("enter the min num"))

max=int(input("Enter the max num"))

for i in range(min,max+1):

    if i > 1:

        for j in range(2,i):

            if (i%j) == 0:

                break

            else:

                print(i)

输出:

enter the min num: 3
Enter the max num: 10

3
5
5
5
7
7
7
7
7
9

3 个答案:

答案 0 :(得分:1)

你有缩进差异:

for j in range(2,i):

        if (i%j) == 0:

            break

## This piece
        else:

            print(i)
## This piece

在你的第一个例子中:

  • 对于每个数字,进行模数计算,如果导致0
  • 则中断
  • 如果没有计算结果为0,则会找到素数(因此打印出来)

恩你的第二个例子:

  • 对于每个数字,进行模数计算,如果导致0
  • 则中断
  • 如果不导致0:打印数字。这种情况比例1中的else更频繁。

答案 1 :(得分:0)

2维循环是这个代码的错误,当i = 5时,你去j(2,5)所以你经历了三次循环,你应该添加一个命令来防止重复

答案 2 :(得分:0)

您;在每次检查成功后重新打印该值。在所有检查之后,你应该放一个标志来打印出来。像下面的东西

for i in range(min,max+1):
    if i > 1:
        prime = True
        for j in range(2,i):
            if (i%j) == 0:
                prime = False
                break
        if prime:
            print(i)