c++ gcd(含代码模板附题目链接)

c++内置gcd,使用方法__gcd()

nefu 1669 高木同学的因子

模板

long gcd(long a,long b)
{
    return b?gcd(b,a%b):a;
}

这题给西片同学,估计他肯定跪

这题实际是求最大公因数的因子的个数

#include 

using namespace std;
long gcd(long a,long b)
{
    return b?gcd(b,a%b):a;
}
long lcm(long a,long b)
{
    return a*b/(gcd(a,b));
}

int main()
{
    long long x,y,t,sum=0;
    int i;
    cin>>x>>y;
    t=gcd(x,y);
    for(i=1;i*i<t;i++)
    {
        if(t%i==0)sum+=2;
    }
    if(i*i==t)sum++;
    cout<<sum<<endl;
    return 0;
}

nefu 1077 最大公约数和最小公倍数 (模板题)

#include 

using namespace std;
int gcd(int a,int b)
{
    return b?gcd(b,a%b):a;
}
int main()
{
    int a,b;
    while(cin>>a>>b)
    {
        cout<<gcd(a,b)<<" "<<a*b/gcd(a,b)<<endl;
    }
    return 0;
}

nefu 764 多个数的最大公约数(模板题)

#include 

using namespace std;
int gcd(int a,int b)
{
    return b?gcd(b,a%b):a;
}
int fun(int a[],int n)
{
    int ans=a[0];
    for(int i=1;i<n;i++)
    {
        ans=gcd(ans,a[i]);
    }
    return ans;
}
int main()
{
    int a,b[20],c;
    while(cin>>a)
    {
        for(int i=0;i<a;i++)cin>>b[i];
        cout<<fun(b,a)<<endl;
    }
    return 0;
}

nefu 765 多个数的最小公倍数(模板题)

#include 

using namespace std;
int gcd(int a,int b)
{
    return b?gcd(b,a%b):a;
}
int lcm(int a,int b)
{
    return a*b/(gcd(a,b));
}
int fun(int a[],int n)
{
    int ans=a[0];

    for(int i=1;i<n;i++)
    {
        ans=lcm(ans,a[i]);
    }


    return ans;
}
int main()
{
    int a,b[20],c;
    while(cin>>a)
    {
        for(int i=0;i<a;i++)cin>>b[i];
        cout<<fun(b,a)<<endl;
    }
    return 0;
}

nefu 1411 LCM&GCD

lcm(x,y)gcd(x,y)==xy

这里不能用库函数,库函数是int类型,这里的爆int值得注意

#include 
using namespace std;
typedef long long ll;
ll gcd(ll a,ll b)
{return b?gcd(b,a%b):a;}

int main()
{
    ll t,x,y;//这里要用long long,因为x,y都是1e6,相乘int会爆
    cin>>t;

    while(t--)
    {
        cin>>x>>y;
        long long cnt=0;
        for(int i=x;i<=y;i++)
        {
            if((x*y)%i!=0)continue;
            ll t=(x*y)/i;
            if(gcd(i,t)==x&&x/gcd(i,t)*y==y)cnt++;//若要用__gcd()库函数,i要longlong
        }
        cout<<cnt<<endl;
    }

    return 0;
}

nefu 1221 人见人爱gcd

跟上面差不多,知道lcm(x,y)gcd(x,y)==xy就能解出

#include 

using namespace std;
long gcd(long a,long b)
{
    return b?gcd(b,a%b):a;
}
long lcm(long a,long b)
{
    return a*b/(gcd(a,b));
}

int main()
{
    long  t,a,b,c;
    while(~scanf("%ld",&t))
    {
        while(t--)
        {
            scanf("%ld %ld",&a,&b);
            printf("%ld\n",a*a-2*b*gcd(a,b));
        }
    }
    return 0;
}

你可能感兴趣的:(c++ gcd(含代码模板附题目链接))