1 条题解
-
0
首先这道题需要的知识点是求gcd,gcd分为两种做法,辗转相减法以及辗转相除法。(PS:辗转相除法是辗转相减法的优化)
首先先贴一下封装函数的代码。如下:
#include<stdio.h> #include<algorithm> using namespace std; int main(){ int a = 2,b = 3; printf("%d",__gcd(a,b)); }
但在以后做题的时候,我们会遇到利用辗转相除法思想来做的题。所以gcd的原码也要学会,如下:
int gcd(int a,int b) { if(a % b == 0) return b; else return gcd(b,a % b); }
这道题的思路,两个数都除以最大公约数以后,这两个数的最大公约数变成了1,1和任意数的最大公约数都是1.所以只需要判断最开始整个数组的最大公约数是否为1,是则输出0,否则输出1. 求整个数组的gcd的代码如下:
int ans = 0; for(int i = 1; i <= n; i++) { ans = gcd(ans,ai[i]); }
- 1
信息
- ID
- 1052
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- (无)
- 递交数
- 114
- 已通过
- 15
- 上传者