Python脚本求质数与快乐数交集:primew()生成非质数
问题分析与解决方案
primew()函数写入121这类非质数,核心原因是质数判断逻辑存在漏洞——121是11的平方,若原判断逻辑未检查到平方根以内的因数,就会误将其判定为质数。
修正后的primew()实现
def primew(): primes = [] with open('prime.txt', 'w') as f: for num in range(2, 1001): is_prime = True # 优化:只需检查到num的平方根,覆盖所有可能的因数 for i in range(2, int(num**0.5) + 1): if num % i == 0: is_prime = False break if is_prime: primes.append(str(num)) f.write(f"{num}\n")
错误原因说明
如果原代码的循环终止条件是num//2或更小范围,会漏掉11这类等于平方根的因数(121÷11=11)。将循环终止条件设为int(num**0.5)+1,可以确保覆盖所有可能的因数:若num存在大于其平方根的因数,必然对应一个小于平方根的因数,只需检查到平方根即可完成准确判断。
验证步骤
- 调用
primew()重新生成prime.txt,此时121会被正确排除(循环中会检测到121%11==0,判定为非质数)。 - 调用
ishr()生成happy.txt。 - 执行
overlap()即可得到正确的交集结果。
内容的提问来源于stack exchange,提问作者MUGWANEZA MANZI Audace
相关产品推荐
相关产品推荐

