个人学习笔记平台,欢迎大家交流

红叶~

Be humble, communicate clearly, and respect others.

辗转相减法

辗转相减法

1、理论依据

\[gcd(a,b) = gcd(b,a-b) \]

辗转相除法的证明


2、应用
用来求若干个形如\((\frac{p}{q})^{r_i}\)最大公约数:其中

  • \(\frac{p}{q}\)不是次幂的形式
  • p、q、\(r_i\)均为正整数
  • 辗转相减法
int gcd(int a, int b) {
  int(a == b)  return a;
  return a > b ? gcd(b,a-b) : gcd(a, b-a); 
}

3、算法推导
我们要求求若干个形如\((\frac{p}{q})^{r_i}\)最大公约数,即求指数的最大公约数,
\(f(p^x, p^y) = p^{(x,y)} = p^{(y,x-y)})=f(p^y, p^{(x-y)}) = f(p^y, \frac{p^x}{p^y})\)
注意 x 要大于 y

int gcd_sub(int a,int b) {
  if(a < b)  swap(a,b);
  if(b == 1)  return a;
  
  return gcd_sub(b, a/b);  
}

数论例题:最大比例

posted @ 2022-02-17 19:31  红叶~  阅读(703)  评论(0编辑  收藏  举报