prime 函数没有返回正确的结果

The prime function is not returning correct result

我写了一段代码来检查一个数是否是素数。在Powershell中有效,但在在线提交平台上无效。

我重新阅读了如何定义一个数是否为质数,但我找不到我的代码中可能遗漏的任何其他内容。

x = int(input('Please enter a number: '))

if x > 1:
    for i in range(2, x):
        if (x % i) == 0:
            print('The number you inputted is not a prime number.')
            break
        else:
            print('The number you inputted is a prime number.')
            break
else:
    print('The number you inputted is not a prime number.')

应该打印出一个数是否为质数。

嗯,首先你必须删除最里面的 else 子句。

例如,考虑 x = 9 的情况。控制流会进入for子句,从i=2开始。它将测试 x % i == 0,即 x 是否可以被 i 整除。它不是。然后转到 else 子句。打印 "The number you inputted is a prime number" 并中断,结束 for 循环。那不是你想要的。

只有在查看它是否可以被所有 i 整除后,您才能得出该数是质数的结论。也就是说,您希望结束数字为素数的代码(print("The number you inputted is a prime number"))在 for 循环之外。

总体上需要进行一些调整。这是一个可行的解决方案:

x = int(input('Please enter a number: '))

if x > 1:
    for i in range(2, x):
        if (x % i) == 0:
            print('The number you inputted is not a prime number.')
            break
    if i==x-1:
            print('The number you inputted is a prime number.')
else:
    print('The number you inputted is not a prime number.'

删除 else 语句怎么样?您确实需要检查所有数字 2 ... (k-1)

x = int(input('Please enter a number: '))

if x > 1:
    is_prime = True
    for i in range(2, x - 1):
        if (x % i) == 0:
            is_prime = False
            break
    if is_prime:
        print('The number you inputted is a prime number.')
    else:
        print('The number you inputted is not a prime number.')

else:
    print('The number you inputted is not a prime number.')

您可以使用 for-else 构造,以便仅在循环结束时才确定质数,而不会因找到除数而中断。此外,在查找除数时,您只需要迭代到输入数字的平方根即可:

x = int(input('Please enter a number: '))

for i in range(2, int(x ** .5) + 1):
    if x % i == 0:
        print('The number you inputted is not a prime number.')
        break
else:
    print('The number you inputted is a prime number.')
x = int(input('Please enter a number: '))

if x > 1:
    for i in range(2, x):
        if (x % i) == 0:
            print('The number you inputted is not a prime number.')
            break
    else:
        print('The number you inputted is a prime number.')

else:
    print('The number you inputted is not a prime number.')

此更正有效!

解决方案

这是根据您尝试代码的方式建模的解决方案。请注意,有时,如果您从某些网站复制代码,您可以 运行 转换为带缩进的代码格式 issues/problems。例如,当我从 programiz.com: prime-number 复制一个类似的代码块时,它反复返回缩进错误。我能解决的唯一方法是手动输入代码逻辑。

也许可以尝试通过将代码复制粘贴到纯文本编辑器(如记事本)中,然后将其复制粘贴到您正在使用的 IDE 中来修复此问题。

def is_prime(num):

    isprime = False
    # prime numbers are greater than 1
    if (num>1):
        for i in range(2,num):
            # check if divisible by any number
            # other than itself and 1
            if (num % i) == 0:
                isprime = False
                break
            # Not divisible by any number 
            # other than itself and 1
            else:
                isprime = True
    # numbers 0 and 1 are not prime numbers
    else:
        isprime = False

    return isprime

is_prime(31), is_prime(42)

输出:

(True, False)

我想推荐一个更pythonic的方式:

x = int(input('Please enter a number: '))
if x<2:
    print('The number you inputted is not a prime number.')
elif x==2:
    print('The number you inputted is a prime number.')
else:
    y = range(2,x)
    mod = map(lambda a:divmod(x,a)[1],y)
    if all(mod):
        print('The number you inputted is a prime number.')
    else:
        print('The number you inputted is not a prime number.')