辗转相除法(欧几里得)
#include <iostream>
using namespace std;
int n;
int gcd(int a, int b){
return b ? gcd(b,a%b):a;
}
int main(){
scanf("%d",&n);
while(n--){
int x,y;
scanf("%d%d",&x,&y);
int ans = gcd(x,y);
printf("%d\n",ans);
}
return 0;
}
好像比内置函数快
内置函数法
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
typedef long long ll;
// const int N = 1e
int main(){
int n;
scanf("%d",&n);
while(n--){
int a,b;
scanf("%d%d",&a,&b);
int ans = __gcd(a,b);
cout << ans << endl;
}
return 0;
}