You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修改Python代码以找出3到31范围内与20互质(coprime)的数

修改Python代码以找出3到31范围内与20互质(coprime)的数

嘿,我来帮你调整这段代码~ 你原来的逻辑是在找和20有共同因数(大于1)的数,现在要反过来找互质的数,核心就是判断:有没有任何大于1的数能同时整除i和20?如果没有,那i就是和20互质的。

先给你基于原有代码修改的版本,这样你能直观看到逻辑的变化:

# 找出3到31范围内与20互质的数
k = 0
z = 20
for i in range(3, 31):
    for j in range(2, 30):
        if ((i % j == 0) & (z % j == 0)):
            k = k + 1
            if k == 1:
                # 只要找到一个共同因数,就说明i和20不互质,直接跳出内层循环
                break
    # 内层循环跑完后,如果k还是0,说明没找到任何共同因数,i就是互质数
    if k == 0:
        print(i)
    k = 0

我修改了这几个地方:

  1. 反转判断逻辑:原来找到共同因数就打印(不互质的数),现在改成:内层循环结束后如果k还是0,说明没找到任何共同因数,才打印这个互质的数
  2. 加了break优化:一旦找到第一个共同因数,就不用继续内层循环了,直接跳出,节省没必要的计算
  3. 调整打印位置:把打印逻辑移到内层循环外面,根据最终的k值来决定是否输出

另外,给你推荐一个更简洁高效的写法,适合你后续学习:Python的math模块里自带gcd函数(计算最大公约数),只要两个数的最大公约数是1,它们就是互质的。用这个方法代码会简洁很多:

import math

# 找出3到31范围内与20互质的数
z = 20
for i in range(3, 31):
    if math.gcd(i, z) == 1:
        print(i)

不管用上面哪一种方法,运行后都会得到你想要的输出:

3
7
9
11
13
17
19
21
23
27
29

顺便解释下你之前的思路问题:

你想写的(((i%j)!==0) & ((z%j)!==0))这个条件,只是判断当前这个j不能同时整除i和20,但这只是单个j的情况。我们需要的是所有大于1的j都不能同时整除i和20,而不是某一个j满足这个条件,所以不能直接用这个条件来判断互质哦。

备注:内容来源于stack exchange,提问作者kzs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 18:52:57