这段代码有意义吗? Python中的质数

时间:2018-07-05 20:14:04

标签: python math numbers

def prime_checker(num):
    if num <=1:
        print('Not Prime')
    elif num == 2:
        print('Prime')
    else:
        for i in (2, (num ** (1/2))):
                if num%i == 0:
                    print('Not Prime')
                    break
                else:
                    print('Prime')
                    break

我是编码的超级新手,只是学习基础知识。我将其基于我在Wikipedia上进行的素数测试。

我认为它可行。这可能很麻烦,但似乎可以正常工作。

3 个答案:

答案 0 :(得分:1)

for循环的迭代器应为整数范围,而不仅仅是2的元组和数字的平方根。使用range时,请务必先使用int将边界转换为整数。而且,如果该数字不能除以循环中的任何数字,则仅被视为质数,因此,您应仅在循环结束后声明质数,否则循环应声明“非质数”并返回。

def prime_checker(num):
    if num <=1:
        print('Not Prime')
    elif num == 2:
        print('Prime')
    else:
        for i in range(2, int(num ** (1/2)) + 1):
            if num%i == 0:
                print('Not Prime')
                return
        print('Prime')

prime_checker(63)
prime_checker(31)
prime_checker(9)

这将输出:

Not Prime
Prime
Not Prime

答案 1 :(得分:1)

您的逻辑很好,但是您可以使用sqrt来表示平方根, 如果您提供一个range参数,则TypeError函数也会引发一个float(通常在使用平方根时)。

有效的实现方式是:

from math import sqrt

def prime_checker(num):
    is_prime = True
    if num <= 1 or not isinstance(num, int):
        is_prime = False
    elif num == 2:
        pass
    else:
        for i in range(2, int(sqrt(num)) + 1):
            if num % i == 0:
                is_prime = False
                break
    if is_prime:
        print('Prime')
    else:
        print('Not Prime')

答案 2 :(得分:0)

我认为我无法将其用作功能。

from math import sqrt

print('This script will check if your input is a prime number.')

num = int(input('Number: '))

if num <=1:
    print('Not Prime')
elif num == 2 or num ==3:
    print('Prime')
else:
    for i in range(2, int(sqrt(num)) + 1):
        if num%i == 0:
            a = 'Not Prime'
            break
        else:
            a = 'Prime'

    print(a)