求最大公约数 不知道为什么错求解答

求最大公约数

if a < b:
    for i in range(1,a+1):
        if a%i == 0,b%i == 0:
        print(i)
else:
    for j in range(1,b+1):
        if a%j == 0,b%j == 0:
        print(j)

不知道哪里错了 为什么循环不可以直接写range(1,a+1)呢??求解答

1、您的两个同时满足的条件表达式,中间要用 and
2、if 下的语句,要有一个单位的缩进,您没有。
3、求的是最大公约数,您的算法有遗漏。您先自己捋捋看。


用 a, b = 18, 99 试炼——

  • 代码运行效果截屏图片

    img

  您的代码是打印输出了所有公约数。需要修改,只输出最大公约数

  • 代码
#!/sur/bin/nve python
# coding: utf-8


a, b = 18, 99

if a < b:
    for i in range(1,a+1):
        if a%i == 0 and b%i == 0:
            print(i)
else:
    for j in range(1,b+1):
        if a%j == 0 and b%j == 0:
            print(j)

  • 优化:设置一个最大公约数变量 max_factor,存储最大公约数。找到更大的,重新赋值给她。最后输出 max_factor 。

  • 代码运行效果截屏图片

    img


      算法优化后,达到了题目要求。在代码中设置了比较a、b大小的环节,这样子就只遍历较小数,没必要写成if的样子了。

  • 代码

#!/sur/bin/nve python
# coding: utf-8


a, b = 18, 99

if b < a:
    a, b = b, a # b < a ,交换a、b的值。

max_factor = 0

for i in range(1, a+1):

    if a%i == 0 and b%i == 0:
        if i > max_factor:
            max_factor = i

print(max_factor)



不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    最大公约数可以使用欧几里得算法进行求解,即用较小的数去除较大的数,然后用余数再去除较小的数,依此类推,直到余数为0,此时的较小的数即为最大公约数。代码如下:

    def gcd(a, b):
        if a < b:
            a, b = b, a
        while b != 0:
            a, b = b, a % b
        return a
    

    关于循环中range函数的使用问题,range函数可以产生指定范围的数字序列。具体来说,常用的用法有三种:

    1. range(N):产生[0, N)的数字序列,其中步长是1。
    2. range(M, N):产生[M, N)的数字序列,其中步长是1。
    3. range(M, N, step):产生[M, N)的数字序列,其中步长是step指定的值。

    需要注意的是,range函数中的参数应为整数,不能为浮点数。如果需要产生一段浮点数序列,可以使用列表推导式或numpy库中的linspace函数。例如:

    import numpy as np
    
    # 产生步长为1的整数序列
    for i in range(10):
        print(i)
    
    # 产生步长为2的整数序列
    for i in range(0, 10, 2):
        print(i)
    
    # 产生从10到1的整数序列
    for i in range(10, 0, -1):
        print(i)
    
    # 产生0到1的浮点数序列,共11个点,包括端点
    np.linspace(0, 1, 11)
    
    # 产生0到1的浮点数序列,共10个点,不包括端点
    np.linspace(0, 1, 10, endpoint=False)
    
    # 产生0到1的浮点数序列,步长为0.1
    np.arange(0, 1, 0.1)
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^