1 条题解

  • 0
    @ 2024-11-11 10:46:21

    首先这道题需要的知识点是求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]);
    }
    

    最后,点击这里学习gcd辗转相除法数论原理点击这里来点击这里。

    • 1

    信息

    ID
    1052
    时间
    1000ms
    内存
    256MiB
    难度
    8
    标签
    (无)
    递交数
    114
    已通过
    15
    上传者