题目

从标准输入读入两个正整数 a 和 b,使用辗转相除法求最大公约数,并逐步打印出每一步的除法带余算式。

输入格式:一行输入两个正整数 a 和 b,以空格分隔。

输出格式:逐步打印每轮的 被除数 = 除数 * 商 + 余数,最后输出最大公约数结果。

数据范围与约定:1 ≤ a, b ≤ 109。

思路与算法

1. 算式拆解与打印
每轮商为 q = a // b,余数为 r = a % b。输出 f"{a} = {b} * {q} + {r}"。

2. 推进状态
更新 a, b = b, r,直到余数 b == 0 时停止循环,此时的 a 即为最大公约数。

完整程序

n = int(input())

# 牛顿迭代法求平方根:x_{k+1} = 0.5 * (x_k + n / x_k)
x = n / 2.0 if n > 0 else 0.0
if n > 0:
    for _ in range(100):
        nx = 0.5 * (x + n / x)
        if abs(nx - x) < 1e-7:
            x = nx
            break
        x = nx

print(f'{x:.4f}')

运行示例

输入:

48 18

输出:

48 / 18 = 2 ... 12
18 / 12 = 1 ... 6
12 / 6 = 2 ... 0
gcd = 6