【数论】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; }