51 lines
804 B
Markdown
51 lines
804 B
Markdown
|
---
|
|||
|
title: 最大公约数gcd
|
|||
|
updated: 2022-01-14 01:51:50Z
|
|||
|
created: 2022-01-08 13:18:07Z
|
|||
|
tags:
|
|||
|
- mcu
|
|||
|
- pll
|
|||
|
- 代码块
|
|||
|
---
|
|||
|
|
|||
|
# 含义
|
|||
|
great common divisor, gcd
|
|||
|
能够整除多个整数的最大正整数
|
|||
|
# 算法
|
|||
|
## 辗转相除法
|
|||
|
$gcd(a,0)=a$
|
|||
|
$gcd(a,b)=gcd(b,a mod b)$
|
|||
|
如果参数都大于0,那么可以简写成
|
|||
|
$gcd(a,a)=a$
|
|||
|
$gcd(a,b)=gcd(a-b,a), if \space a>b$
|
|||
|
$gcd(a,b)=gcd(a,b-a), if \space a<b$
|
|||
|
### 代码
|
|||
|
```c
|
|||
|
int gcd(int a, int b)
|
|||
|
{
|
|||
|
if(b)
|
|||
|
{
|
|||
|
while((a %= b) && (b %= a));
|
|||
|
return a + b
|
|||
|
}
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
```c
|
|||
|
// greatest common denominator - euclid algo w/o recursion
|
|||
|
uint32_t gcd_iter(uint32_t u, uint32_t v)
|
|||
|
{
|
|||
|
uint32_t t;
|
|||
|
while (v) {
|
|||
|
t = u;
|
|||
|
u = v;
|
|||
|
v = t % v;
|
|||
|
}
|
|||
|
return u ;
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
|
|||
|
#mcu
|
|||
|
#pll
|
|||
|
#代码块
|