如何在Python中实现与Java素数校验逻辑等价的for循环写法
Python的for循环是基于可迭代对象的遍历机制,和Java的三段式for循环结构不同,没办法直接在for声明处写类似i*i <= number的终止条件,但有两种等价的实现方案,可以完全避免在循环内部加额外的判断:
方案1:直接指定range的终止边界为平方根
通过计算待校验数的平方根作为range的终止值,循环只会遍历到平方根位置,逻辑和你的Java版本完全一致:
Python3.8及以上版本(推荐,无浮点数精度问题)
使用math.isqrt直接返回整数平方根,避免浮点数精度误差:
import math def is_prime(number): # 额外边界条件此处省略 for i in range(2, math.isqrt(number) + 1): if number % i == 0: return False return True
兼容旧Python版本
用math.sqrt计算后转整数,加1是因为range的终止值是开区间,避免刚好是平方数时漏判:
import math def is_prime(number): # 额外边界条件此处省略 for i in range(2, int(math.sqrt(number)) + 1): if number % i == 0: return False return True
方案2:使用while循环实现和Java完全一致的逻辑
如果不想导入math模块,也可以用while循环复刻Java版本的写法:
def is_prime(number): # 额外边界条件此处省略 i = 2 while i * i <= number: if number % i == 0: return False i += 1 return True
以上两种方案的时间复杂度和你写的Java版本完全一致,都没有多余的循环次数和内部判断。
内容的提问来源于stack exchange,提问作者jdk
相关产品推荐
相关产品推荐

