求两个正整数a,b的最大公约数。
时间: 2024-05-06 19:21:53 浏览: 88
大学经典C语言编程试题.doc
可以使用辗转相除法或欧几里得算法来求解。以下是两种方法的示例:
1. 辗转相除法:
a和b的最大公约数等于a%b和b的最大公约数,其中%表示取模运算。因此,可以反复使用这个性质,直到b为0为止,此时a就是最大公约数。
Python代码:
```
def gcd(a, b):
if b == 0:
return a
else:
return gcd(b, a % b)
```
2. 欧几里得算法:
a和b的最大公约数等于b和a除以b的余数的最大公约数。因此,可以反复使用这个性质,直到余数为0为止,此时b就是最大公约数。
Python代码:
```
def gcd(a, b):
while b != 0:
a, b = b, a % b
return a
```
这两种方法的时间复杂度均为O(log(max(a,b)))。
阅读全文