最重要的防御是priemcecker,它会通过将数字除以第一个质数来检查您输入的数字是否是质数:2,如果有小数,它将从防御制词人获得下一个质数,但是priemmaker一次只能生成1个质数,以使其高效。如果除以第二个质数仍然有一个小数,它将第二个质数与第一个质数2相加。
因此,如果您要检查7是否为质数,它将首先除以2,看到它不可除,因此它将得到下一个质数3,并且它仍然不可除,因此将加3到列表中,它将得出结论7是质数。
问题是,如果您添加数字,则此代码将添加两次,我认为这会使效率降低。 我已经尝试了很多方法,但是我认为问题出在priemcheker的定义上。
如果我尝试使用19号数字执行此代码,我将得到这些准确的结果
有人可以说为什么将3、5、7和11加两次。
def priemmaker (getal,lijst):
for x in range (int(getal)):
var2 = True
for y in range (len(lijst)):
if ((x+2)%lijst[y]) == 0:
var2 = False
break
if var2 == True:
lijst.append(x+2)
break
return lijst[(len(lijst)-1)]
def priemcheker (getal):
lijst = [2]
var1 = True
while lijst[len(lijst)-1] < int(getal/2):
if getal % lijst[len(lijst)-1] == 0:
var1 = False
break
lijst.append(priemmaker(getal,lijst))
print (lijst)
return var1
def results (var1):
if var1 == True:
print ("het is een priemgetal")
else:
print ("geen priemgetal")
results (priemcheker(19))
[2, 3, 3]
[2, 3, 3, 5, 5]
[2, 3, 3, 5, 5, 7, 7]
[2, 3, 3, 5, 5, 7, 7, 11, 11]
it is a prime number
答案 0 :(得分:0)
您不应在priemcheker
中添加:
def priemmaker (getal,lijst):
for x in range (int(getal)):
for y in lijst:
if ((x+2)%y) == 0:
break
else:
lijst.append(x+2)
break
return lijst[-1]
def priemcheker (getal):
lijst = [2]
while lijst[-1] < int(getal/2):
if getal % lijst[-1] == 0:
return False
priemmaker(getal,lijst)
print (lijst)
return True
def results (var1):
if var1:
print ("het is een priemgetal")
else:
print ("geen priemgetal")
results (priemcheker(19))