本人蒟蒻,题解如果有问题(肯定有),希望大家在评论区中指出,谢谢。
本题的做法:
- 直接用辗转相除法求解
- 使用STL中的__gcd函数
本题解主要介绍的是STL做法,__gcd()函数其实和手写的GCD函数用法一样,就是方便一些
(注意!函数前面有两个下划线哦。即:是“__gcd”而不是“_gcd”)
STL代码如下:
#include<bits/stdc++.h>//万能头文件
using namespace std;//这句话一定不能忘哦!
int n,a,b;
int main() {
cin >> n;
while(n--){
cin >> a >> b;
cout << __gcd(a,b) << endl;//调用STL函数
}
return 0;
}
在这里,也贴一下欧几里得算法的c++代码:
#include<bits/stdc++.h>
using namespace std;
int n,a,b;
int gcd(int x,int y){
if(x % y == 0)return y;
return gcd(y,x % y);
}
int main() {
cin >> n;
while(n--){
cin >> a >> b;
cout << gcd(a,b) << endl;
}
return 0;
}
感谢大家从头看到了尾
这个gcd如何传入long long 啊
以后面试也可以stl吗
哦知道了
__gcd()csp考试能用吗?
我查了一下,似乎是不可以,不过手写一下也不是很费劲~~~
可以。
noi官网有发的注意事项,应该不能
__gcd的参数类型必须得是一样的
对,确实是这样~~~TQL
STL大法好
stl🐂~~~
蟹蟹鼓励~~~♪(・ω・)ノ
太🐂啦
蟹蟹~
额,其实 if(x < y)swap(x,y);这句没必要的。。。
谢谢提醒,已修正~
这个不用把较大的数字放在前面吗?
不用,因为函数递归时参数的位置进行了交换
前一步是
gcd(a,b) (a < b)
,后一步自动就是gcd(b,a)
了ok明白
天哪!STL这样啊。
是的,STL就是这么神奇,什么都有。