【发布时间】:2022-01-02 13:37:47
【问题描述】:
"我们可以在不通过表格的情况下应用这个算法:如果 d 从 2 变化,则整数 n 是素数 在 √n n 检查条件: 只要它不能被 d 整除,我们就增加 d 的值。如果 n 可被 d 整除,则 n 不是第一。当然,如果n不能被d所取的任何值整除,那么n 是素数。"
我的问题是如何在 python 中说 d 在 √n 处从 2 变化?范围 ?兰丁?但 randint 是随机的,范围不适用于 math.sqrt(n)
√n 的意思是如果我选择 7 作为数字 n 和 2 作为 d 那么这是愚蠢的,因为 √7 是 2.64575131106 所以我只是在 2 和 2.64575131106 之间测试算法.. .
回答后编辑:
当我返回 True 时,什么都不显示
【问题讨论】:
-
这并不愚蠢。事实上,要测试 7 是否为素数,您只需要测试 7 不能被 2 整除。
-
问题是,你想测试是否存在两个数字 a,b 2 n == a * b。但是,只有当 a = sqrt(n) (反之亦然)时,才可能出现这样的相等性。实际上,如果它们都小于或都大于 sqrt(n),那么它们的乘积将小于或大于 n。因此,您只需要使用 2
-
请注意,将搜索限制在 2 和 sqrt(n) 之间是一种优化。如果你搜索得太多,例如如果你搜索 2 和 sqrt(n)+1 之间的所有除数
d,或者搜索 2 和 n-1 之间的所有除数d,它也是正确的。只需确保在可能的除数中不包含 1 或n。
标签: python python-3.x