AT_ddcc2017_final_b GCDロボット 题解

· · 题解

题目传送门

更好的阅读体验?

做法:

提示:

提供三种代码:

  1. 压行代码:
#include<cstdio>//不用万能头可以提速 
long long gcd(long long x,long long y) { return y==0?x:gcd(y,x%y); } //最大公约数函数 
long long n,z,a[100005],ans=1;
int main()//压一压行 
{
    scanf("%lld%lld",&n,&z);
    for(register int i=1;scanf("%lld",&a[i])&&i<=n;i++)  ans=ans/gcd(ans,gcd(a[i],z))*gcd(a[i],z);
    printf("%lld\n",ans);
    return 0;
}
  1. 不压行代码:
#include<cstdio>
long long gcd(long long x,long long y) { return y==0?x:gcd(y,x%y); } //最大公约数函数 
long long n,z,a[100005],ans=1;
int main()
{
    scanf("%lld%lld",&n,&z);
    for(register int i=1;i<=n;i++)
    {
        scanf("%lld",&a[i]);
        long long nw=gcd(a[i],z);
        ans=ans/(gcd(ans,nw))*nw;
    }
    printf("%lld\n",ans);
    return 0;
}
#include<bits/stdc++.h>
using namespace std;
long long n,z,a[100005],ans=1;
int main()
{
    scanf("%lld%lld",&n,&z);
    for(register int i=1;i<=n;i++)
    {
        scanf("%lld",&a[i]);
        long long nw=__gcd(a[i],z);//stl里的函数
        ans=ans/(__gcd(ans,nw))*nw;
    }
    printf("%lld\n",ans);
    return 0;
}