1 条题解
-
1
《最大公约数》题解
此题如果利用for循环必会错5个点(不要问我怎么知道的),所以我们必须使用欧几里得算法(又名辗转相除法)。 欧几里得算法,就是两个数中略大的那一个数当做被除数,另外一个数作为除数,两数相除,除完之后在拿除数除以余数……一直像上述操作直到余数为0时,除数就是两数的最大公约数。 (注意!!!此题因为数据是10^{16}必须开long long储存值) 我又上网查了一下相关资料,公式就是: gcd(a,b)=gcd(b,a % b) 例如,计算252和105的最大公约数: 252 ÷ 105 = 2,余数为42 105 ÷ 42 = 2,余数为21 42 ÷ 21 = 2,余数为0 因此,252和105的最大公约数是21。 题解放在下面了,一个大拇哥拿走。三克油歪瑞妈迟
#include<bits/stdc++.h> using namespace std; long long a,b,x=0,y=0,z=0; int main(){ cin>>a>>b; x=a; y=b; while(x%y!=0){ z=x; x=y; y=z%y; } cout<<y; return 0; }
信息
- ID
- 366
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- (无)
- 递交数
- 26
- 已通过
- 9
- 上传者