我有一个代码检查数字是否为质数,并相应地输出“是”或“否”。但是,当我输入1763时,即使它不是素数,它也会输出“是”。该代码通过检查数字是否可以被2到n-1之间的任何数字整除来检查数字是否为质数。因此,当我输入1763时,它应该输出“ No”,因为1763可以被41整除。我的代码出了什么问题?
$query="SELECT * FROM table_name WHERE MATCH (column_name) AGAINST
('search_word' IN NATURAL LANGUAGE MODE)" ;
答案 0 :(得分:1)
问题是您没有考虑所有除数。第一个条件(if n%i==0:
)为假时,就执行第二个elif
条件并打印“是”。
解决方案:您可以使用一个标志,当找到除数时,该标志将仅变为 ,这意味着该数字不是素数。以下是您的修改过的代码(仅显示部分代码,其余部分与您相同)。正如@bereal在评论中指出的那样,您不需要迭代最多n
,而只需要迭代平方根sqrt(n)
。 math.ceil
返回最接近的四舍五入整数。
import math
def isPrime(n):
flag = 0
if n==2:
print("Yes")
return
else:
# for i in range (2, n):
for i in range (2, math.ceil(np.sqrt(n)) + 1):
if n%i==0:
print("No")
flag = 1
break
if not flag:
print ("Yes")
1763
No
答案 1 :(得分:0)
在循环中,即使无法证明它不是素数,您也会在第一次迭代时中断。
只有在检查了所有可能的除数到n
之后,才需要打印是(实际上仅检查所有向上n
的平方的数字就足够了。)
for i in range (2,n):
if n%i==0:
print("No")
return
print("Yes")
答案 2 :(得分:0)
只有在遍历所有可能的除数而不找到一个除数之后,才应将数字声明为质数。为此,您可以改用for-else
构造,其中else
块仅在for
循环没有被break
语句中止的情况下执行:
def isPrime(n):
if n==2:
print("Yes")
else:
for i in range (2,n):
if n%i==0:
print("No")
break
else:
print("Yes")