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

python素数检查的困难

python素数检查的困难,python,primes,Python,Primes,我一直试图让这段代码工作,以返回一个输入数字作为2到49之间的素数,但它所做的只是返回大多数数字作为素数,即使它们不是。。。在练习中,我得到了3,5和7是素数,所以忽略这一点 def prime(a): if a < 2: return False if a % 2 == 0: return False if a == 3 or a == 5 or a == 7: return True for n in range(3,int(a ** 0.5) + 1): if a % n

我一直试图让这段代码工作,以返回一个输入数字作为2到49之间的素数,但它所做的只是返回大多数数字作为素数,即使它们不是。。。在练习中,我得到了3,5和7是素数,所以忽略这一点

def prime(a):
if a < 2: return False
if a % 2 == 0: return False
if a == 3 or a == 5 or a == 7: return True
for n in range(3,int(a ** 0.5) + 1): 
    if a % n == 0: return False
    if a % n != 0: return True

a = input("Enter a number between 1 and 49: ")

if prime(a) is False:
    print a, " is not a prime number"

if prime(a) is True:
    print a, " is a prime number"
def prime(a):
如果a<2:返回False
如果%2==0:返回False
如果a==3或a==5或a==7:返回True
对于范围(3,int(a**0.5)+1)内的n:
如果%n==0:返回False
如果是%n!=0:返回True
a=输入(“输入一个介于1和49之间的数字:”)
如果素数(a)为假:
打印“不是质数”
如果质数(a)为真:
打印a,“是质数”
你不需要第二个if条件。否则,当数字不能被当前值
n
整除时,它将立即返回。但你不想这样。如果当前
n
无法除以您的数字,则需要检查下一个值

因此,只需删除if,并在循环结束后添加一个
return True

因此,您的
prime()
方法应该是这样的:-

def prime(a):
    if a < 2: return False
    if a % 2 == 0: return False
    if a == 3 or a == 5 or a == 7: return True
    for n in range(3,int(a ** 0.5) + 1): 
        if a % n == 0: return False

    return True
def prime(a):
如果a<2:返回False
如果%2==0:返回False
如果a==3或a==5或a==7:返回True
对于范围(3,int(a**0.5)+1)内的n:
如果%n==0:返回False
返回真值

这不是您正在使用的算法,但它有趣且相关:有一个素数的概率测试,使用Fermat的小定理(请参阅)。你必须到1729才能找到一个相对于2、3和5通过测试但不是素数的数字。(只有四个<10000)。
def prime(a):
    if a < 2: return False
    if a % 2 == 0: return False
    if a == 3 or a == 5 or a == 7: return True
    for n in range(3,int(a ** 0.5) + 1): 
        if a % n == 0: return False

    return True