如何创建在 Python 中正确显示素数的代码?

问题描述 投票:0回答:4

素数是只能被自身和 1 整除的数。 例如,数字 5 是素数,因为它只能被 1 整除 和 5. 然而,数字 6 不是质数,因为它可以被整除 2 和 3。

编写一个名为 is_prime 的布尔函数,它接受一个整数作为参数 如果参数是素数则返回 true,否则返回 false。使用 程序中提示用户输入数字然后输入的功能 打印该数字是否为质数。

这是我输入的PYTHON代码,但它告诉我这是错误的。我已经尝试过,但无法获取。

if num > 1:
    for i in range(2,num):
        if (num % i) == 0:
            print(num,"is not a prime number")
            print(i,"times",num//i,"is",num)
        break
    else:
        print(num,"is a prime number")
    else:
        print(num,"is not a prime number")
python
4个回答
0
投票

你快明白了。

break
在错误的位置并且不能有(并且不想/不需要)两个
else
子句:

if num > 1:
    for i in range(2,num):
        if (num % i) == 0:
            print(num,"is not a prime number")
            print(i,"times",num//i,"is",num)
            break
    else:
        print(num,"is a prime number")

0
投票

您需要整理两个 else 语句,并更改算法,以便在 for 循环的所有迭代都失败时仅打印

num
is a prime number

if num < 2: # catch 1 and anything less than zero
    print(num, "is not a prime number")
else:
    prime = True
    for i in range(2, num):
        if num%i == 0:
            print(num, "is not a prime number")
            print(i,"times",num//i,"is",num)
            prime = False
            break
    if prime:
        print(num,"is a prime number")

我会将其放入 isPrime 函数中。您只需检查直到数字平方根的因数。

编辑:我在你的问题中看到你提到了这一点,你只需要修改此代码即可返回

True
False

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

输出

0 is not a prime number

1 is not a prime number

2 is a prime number

3 is a prime number

4 is not a prime number
2 times 2 is 4

5 is a prime number

6 is not a prime number
2 times 3 is 6

7 is a prime number

8 is not a prime number
2 times 4 is 8

9 is not a prime number
3 times 3 is 9

0
投票

我花了一些时间在 Python 中开发了一个快速但准确的

is_prime
函数。这是:

from math import sqrt # you can just import math, but I only use sqrt
def is_prime(n):
    if n<0:
        n*=-1
    if n<2:
        return False
    for i in range(2,int(sqrt(n))+1): # remember to fix sqrt to math.sqrt if you changed the
        if n%i==0:                    # import to import math instead of from math import sqrt
            return False
    return True

说明: 如果 x 是素数,则 -x 是素数。所以我只是用

使数字为正
if n<0:
    n*=-1

0 是合数(它具有因数 1, 2, 3, 4, 5, ...),而 1 都不是,而且它们都不是质数,并且由于 n>-1 (因为它是绝对值),因此条件<2 will suffice.

if n<2:
    return False

之后,我从 2 循环到

int(math.sqrt(n))+1
。只需将
math.sqrt(n)
转换为 int,然后加 1。 math.sqrt 的原因是 n 只能有其平方根(以及它本身)之前的因子。如果
int()
使其小于之前的值,则 +1 用于将范围保持在界限内。

for i in range(2,int(math.sqrt(n))+1):
    if n%i==0:
        return False

在循环中,我检查 i(循环计数器)是否能被 n 整除。如果是,则意味着 n 有一个因子不是 1(它从 2 开始)或它本身(它以自身的平方根结束,并且 1 也不例外,因为这是用 if n<2 condition). At that point, it returns False.

修复的

如果 n 通过了所有这些检查,则它是质数。


0
投票

这是我的代码:

a=int(input("Enter a number: "))
i=2
p=[]
while i<=a-1:
    p.append(a%i)
    i=i+1
if 0 not in list(p):
    print(a, "is a prime")
else:
    print(a, "is not a prime")
© www.soinside.com 2019 - 2024. All rights reserved.