如何解决这两种质数检查算法有什么区别
所以最近我一直在试图找出应该检查数字是否为素数的算法。所以我想出了一个主意,让代码看起来像这样:
def if_prime(num):
for divisor in range(2,num):
if (num % divisor) == 0:
return f"{num} is not prime"
else:
return f"{num} is prime"
print(if_prime(9))
所以基本上这段代码返回了错误的值,它说 9 是一个质数,显然它不是,但是下面的代码似乎可以工作,我不知道有什么区别。
def if_prime(num):
for divisor in range(2,num):
if (num % divisor) == 0:
return f"{num} is not prime"
return f"{num} is prime"
print(if_prime(9))
解决方法
差别很大!
第一个错了!:
def if_prime(num):
for divisor in range(2,num):
if (num % divisor) == 0:
return f"{num} is not prime"
else:
return f"{num} is prime"
这会检查一个数是否有 0 到 num 之间的任何因数,如果找到一个因数,则返回表示该数不是素数。
但错误在于,如果它没有找到一个因子,那么它会立即返回 true 并且不检查其他除数:
例如,如果 9 不能被 2 整除并且 if 条件变为假,那么这会说 9 是一个质数!
另一方面,第二个是正确的! :
def if_prime(num):
for divisor in range(2,num):
if (num % divisor) == 0:
return f"{num} is not prime"
return f"{num} is prime"
在这一个中,我们也循环遍历从 2 到 num 的所有除数,但在这种情况下,如果一个数不是除数,我们不会返回任何内容(我们检查所有可能的除数),因此如果循环结束,我们发现没有除数则表示它是质数!
但这也有一个小错误,因为它会说 1 是素数!
这里是 if_prime 函数的正确且高效的版本:
def if_prime(num):
for divisor in range(2,num/2):
if (num % divisor) == 0:
return f"{num} is not prime"
if num == 1:
return f"{num} is not prime"
else:
return f"{num} is prime"
,
在您的第一个示例中,
else:
return f"{num} is prime"
在第一次迭代后中断 for 循环,因为 return 停止循环并从方法返回值
在您的第二个示例中,
return f"{num} is prime"
仅在 for 循环运行完成而未找到要返回的非质数时才执行
,你的第一个函数的问题是,如果 num 不能被 2 整除,它会返回一个误报。如果 num 不能被 2 整除,你需要继续前进。这已在您的第二个函数中得到纠正。
def if_prime(num):
for divisor in range(2,num):
if (num % divisor) == 0:
return f"{num} is not prime"
return f"{num} is prime"
这里,else 语句执行的唯一方式是 if 语句不返回任何内容。这只是意味着您没有找到从 2 到 num 的除数。所以它必须意味着 num 是素数。因此它返回 num 作为素数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。