【数论】P1029 最大公约数和最小公倍数问题

 

 

 

由于lcm=a*b/gcd(a,b)

所以我们枚举i 为 1-sqrt(n) 然后去判断是否可行

 

代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,m;
ll gcd(ll a,ll b)
{
    return b?gcd(b,a%b):a;
}
int main()
{
    freopen("a.in","r",stdin);
    freopen("a.out","w",stdout);
    scanf("%d%d",&n,&m);
    ll ans=0,flag=0;
    for(int i=1;1LL*i*i<=1LL*n*m;i++)
    {
        if((1LL*n*m)%i) continue;
        if(gcd(i,(1LL*n*m)/i)==n)
        {
            ans++;
            if((1LL*n*m)/i==i) flag++;
        }
    }
    printf("%d\n",ans*2-flag);
    return 0;    
} 

 

posted @ 2020-11-24 19:22  andyc_03  阅读(81)  评论(0编辑  收藏  举报