欧几里得算法
Star_LIcsAy · · 个人记录
欧几里得算法的核心是:
我们定义
证明:
假设
则
我们定义
则有
当
例题:P1888 三角函数
-
虽然名字叫三角函数,但其实和三角函数基本没什么关系。
-
我们需要使用欧几里得算法来求得两值的最大公约数,来达到对原分数进行化简的效果。
#include<bits/stdc++.h>
using namespace std;
int gcd(int x,int y){
if(y==0){
return x;
}
return gcd(y,x%y);
}
int main(){
int a[5];
for(int i=1;i<4;i++)
scanf("%d",&a[i]);
sort(a+1,a+4);
int d=gcd(a[1],a[3]);
a[1]/=d,a[3]/=d;
printf("%d/%d",a[1],a[3]);
return 0;
}
- 欧几里得算法的高级写法(三目运算)
int gcd(int a,int b){
return b?gcd(b,a%b):a;
}
扩展欧几里得算法
其主要目的是,通过在计算
-
例:P1516 青蛙的约会
T201531 简单不简单
int ex(int a,int b){
if(b==0){
x=1,y=0;
return a;
}
int d=ex(b,a%b);
int temp=x;
x=y;
y=temp-a/b*y;
return d;
}
//最后的x和y就是上述不定方程的解(x有可能为负)