hdu GCD and LCM

题意:gcd(a,b,c)=g; lcm(a,b,c)=l; 求出符合的a,b,c的所有情况有多少中。

思路:l/g=p1^x1*p2^x2*p3^x3.....;   x/g=p1^a1*p2^a2*p3^a3.....; b/g=p1^b1*p2^b2*p3^b3.....; c/g=p1^c1*p2^c2*p3^c3.....;

在ai,bi,ci中至少有一个为0,至少有一个为x1,另一个的范围为0-x1;符合条件的方案数为 (x1+1)^3-(x1)^3-x1^3+(x1-1)^3; 总的情况数减去不含有0的情况和不含有x1的情况,再加上重复减去的;

 #include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std; int t;
int g,l; int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&g,&l);
if(l%g!=)
{
printf("0\n");
}
else
{
int m=l/g;
__int64 ans=;
for(int i=; i*i<=m; i++)
{
if(m%i==)
{
int cnt=;
while(m%i==)
{
m/=i;
cnt++;
}
ans*=((cnt+)*(cnt+)*(cnt+)-cnt*cnt*cnt-cnt*cnt*cnt+(cnt-)*(cnt-)*(cnt-));
}
}
if(m>)
{
ans*=;
}
printf("%I64d\n",ans);
}
}
return ;
}
上一篇:关于MyBatis的工作流程


下一篇:初学c++