题意:输入一个数n,问若n==LCM(a,b),存在的这种(a,b)共有多少对。
题解:首先先了解一下LCM(a,b)的由来。
将a,b拆分
设max(kai,kbi)=ri;
所以如果a中取ri,则b只能取[0,ri-1],则有ri种;
如果b中取ri,则a只能取[0,ri-1],则有ri种;
如果a,b均取ri,则有1种;
所以对于每个因子pi均有2*ri+1种取法,使得(a,b)为不同对数(包括了(a,b)和(b,a));
#include<iostream>
using namespace std;
int main()
{
int n;
while(cin>>n&&n)
{
int nn=n;
int ans=1;
for(int i=2;i*i<=n;i+=2)
{
if(n%i==0)
{
int count1=0;
while(n%i==0)
{
n/=i;
count1++;//count1记录每个因子出现的次数
}
ans*=(count1*2+1);
// cout<<"i: "<<i<<" count1: "<<count1<<endl;
// cout<<ans<<endl;
}
if(i==2)
i--;
}
if(n>1)//如果存在大质因子,范围在i*i<=n,之外的,需要再乘3
ans*=3;
cout<<nn<<" "<<ans/2+1<<endl;
}
return 0;
}