Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.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 - Fatal编程技术网

在Python中,编写一个脚本,确定用户输入的数字是否为素数

在Python中,编写一个脚本,确定用户输入的数字是否为素数,python,Python,编写一个脚本,确定用户输入的数字是否为素数,并根据脚本找到的内容打印“您输入的数字是素数”或“您输入的数字不是素数” 我有一些测试用例失败的代码,我不知道为什么。我在这里看到了一些涉及计算sqrt的答案,但我不明白为什么这会有好处 num= int(input()) if num == 0 or num ==1: print('The number you inputted is not a prime number.') while num < 0: break if

编写一个脚本,确定用户输入的数字是否为素数,并根据脚本找到的内容打印“您输入的数字是素数”或“您输入的数字不是素数”


我有一些测试用例失败的代码,我不知道为什么。我在这里看到了一些涉及计算sqrt的答案,但我不明白为什么这会有好处

num= int(input())

if num == 0 or num ==1:
    print('The number you inputted is not a prime number.')
while num < 0:
    break
if num > 0:
    for i in range(2,num):
        if num%i==0:
            print('The number you inputted is not a prime number.')
            break
        else:
            print('The number you inputted is a prime number.')
            break
num=int(输入())
如果num==0或num==1:
打印('您输入的数字不是质数')
当num<0时:
打破
如果num>0:
对于范围内的i(2,num):
如果num%i==0:
打印('您输入的数字不是质数')
打破
其他:
打印('您输入的数字是素数')
打破

当我尝试使用一些测试用例时,代码总是正确的,但它没有通过我的家庭作业。

你的逻辑是错误的;只有当条件的计算结果为
True
,您才应该中断,因为您需要测试所有小于等于
num**0.5
num
)的数字。9是代码计算为素数的非素数的示例

你想要这样的东西:

prime = True
if num > 0:
    for i in range(2,num):
        if num % i == 0:
            prime = False
            break

    if prime:
        print(f'{num} is a prime number.')

    else:
        print(f'{num} is not a prime number.')

通过在开始时将
prime
设置为
True
,并仅在找到因子时将其更改为
False
,我们可以在对
i
的所有值的条件进行评估后,判断该数字是否为prime。

以下逻辑中出现问题:

for i in range(2,num):
    if num%i==0:
        print('The number you inputted is not a prime number.')
        break
    else:
        print('The number you inputted is a prime number.')
        break
要查看问题发生的位置,请尝试使用代码检查
9
是否为prime。 您的
for
循环执行以下操作:

  • i=2
  • 如果num%i==0,而不是prime,则中断
  • else
    ,素数,中断
  • 这意味着您的
    for
    循环保证在
    i==2时停止。
    换句话说,根据这个算法,素数的定义是“任意奇数”

    要解决这个问题,您需要找到一种方法,允许循环在所有剩余的可能除数之间迭代,而不会在第一次迭代后中断


    我就到此为止,给你一个机会看看你是否能自己解决剩下的问题。如果您不能取得任何进展,请告诉我,我会给出另一个提示。

    “我在这里看到一些涉及计算sqrt的答案,但我不明白为什么这会有好处”-平方根的原因是效率。以数字16为例,它包含因子(1,16)、(2,8)、(4,4)、(8,2)、(16,1)。因为16的平方根是4,所以测试超出范围的任何数字都是多余的。此外,你不需要测试任何不是素数的数字。由于4是2和2的系数,因此测试2、4和8也是多余的。对于这个问题,这可能没什么帮助,但你至少可以忽略2之外的偶数。只检查奇数,直到候选数的平方根,这是一个好的开始。你可以考虑的最后一个优化是奇数素数>3始终是整数k的形式(6K±1),因为6K、6K±2和6K±4是偶数,6K±3可被3和6k+5整除。≡ 6k-1.注:如果没有小的主要因素,则试验划分是缓慢的。Baillie PSW是目前最好的方法(保证小数字的结果,即使大数字也没有已知的反例)。啊!忍者:P