UVa 10892 LCM Cardinality (質因數分解)
阿新 • • 發佈:2018-12-22
題意:輸入一個數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; }