欧几里得算法(辗转相除法)
1.简介
欧几里得算法又称辗转相除法,是指用于计算两个非负整数a,b的最大公约数。应用领域有数学和计算机两个方面。计算公式gcd(a,b) = gcd(b,a mod b)。两个整数的最大公约数是能够同时整除它们的最大的正整数。辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数相除余数的最大公约数。
2.Python实现六进制转换
辗转相除法求最大公约数和最小公倍数
a, b = map(int, input("输入两个数").split())
a1, b1 = a, b
res = a1 % b1
while res != 0:
a1 = b1
b1 = res
res = a1 % b1
print("最大公约数为:"+str(b1)+"最小公倍数为:"+str(a*b/b1))
代码解释:
解释一下循环体内的代码
a1 = b1
:将b1
的值赋给a1
,这是为了准备下一轮的计算,将较小的数赋给a1
。b1 = res
:将res
的值赋给b1
,这是为了准备下一轮的计算,将较大的数赋给b1
。res = a1 % b1
:重新计算a1
除以b1
的余数,并将结果赋给res
。当res
最终等于0时,退出while
循环。
3.约分
约分其实现在看来就没有那么难了,因为我们前面求过最大公约数,让我们要约分的数去除最大公约数就可
举个例子:
题目描述
输入一组勾股数 a,b,c,用分数格式输出其较小锐角的正弦值。(要求约分。)
输入格式
一行,包含三个正整数,即勾股数 a,b,c(无大小顺序)。
输出格式
一行,包含一个分数,即较小锐角的正弦值
这是洛谷上的一道题,我们怎么做呢?
a,b,c=map(int,input().split())
d=max(a,b,c)
e=min(a,b,c)
def gcd(m,n):
while n != 0:
g=m%n
m=n
n=g
return m
k=gcd(d,e)
print(f"{int(e/k)}/{int(d/k)}")
这里其实和前面大体上是一样的,通过欧几里得原理求得我们所需的最大公约数,然后通过最大值和最小值的数同时除以最大公约数,就得到了约分后的结果。