我试图编写自己的公式来查找素数,但它并不完全有效,我找不到逻辑中的缺陷。不记得我已经环顾四周,但找不到一个与我相似的算法。
我的代码:
#Challenge 7
prime = []
num = 0
found = False
while found == False:
if num == 0 or num == 1:
num+=1
else:
for value in range(2, num+1):
if len(prime) == 50:
print('Found all')
found = True
break
if num % value == 0:
num+=1
else:
if num not in prime:
prime.append(num)
else:
pass
print(prime)
此代码适用于前几个素数(3,5,7 ......) 但它也提供了不正确的值,如10,我不明白为什么。如果有人可以向我解释,以便我能理解逻辑错误在哪里,我会很感激。
答案 0 :(得分:2)
错误来自这部分
if num % value == 0:
num+=1
else:
if num not in prime:
prime.append(num)
else:
pass
一旦我们发现第一次出现非除数,你就假设整数是素数。但素数的def是区间[2..prime]中的每个整数都是非除数。我们如何检查是否有任何数字没有任何除数?
def isPrime(x):
for v in range(2, x):
if (x % v == 0):
return False;
return True;
这样的事情可以检查任何给定的数字是否是素数。而且由于我们现在已将isPrime
部分从主循环中取出,因此我们不再需要for
循环。这样的事情可以做到
def isPrime(x):
for v in range(2, x):
if (x % v == 0):
return False;
return True;
prime = [}
num = 2
found = False
while found == False:
if len(prime) == 50:
print("found all")
found = True
break
if(isPrime(num)):
print(num)
prime.append(num)
num+=1
else:
num+=1
答案 1 :(得分:1)
如果您为fun generateWeek(): Week{
val format = SimpleDateFormat("MMM d", Locale.ENGLISH)
val mondayTime = getMondayTime()
val sundayTime = getSundayTime()
val label = "${format.format(mondayTime)} - ${format.format(sundayTime)}"
return Week(label, mondayTime, sundayTime)
}
设置断点,您将清楚地看到问题。
当您开始对num == 10
内部进行除法检查时,第二个数字为3,因此num(10)模数值(3)为1,这是您确定素数的测试。你的测试 应该是什么,它不会被任何数字整除,而不是它(因为你用2检查,实际上不到一半)。
所以,请考虑一下:
for value in range(2, num + 1):