质因数分解 A∗B 只要分别分解 A,B 然后吧相同的质数指数相加就可以了。
把 A 个东西分成两堆共有 A+1 种方案,所以指数加一在相乘即可。
注意分讨 >A 或 >B 的质因数。
CODE:
#include<bits/stdc++.h> #define fru(i,j,k) for(int i=j;i<=k;++i) #define frd(i,j,k) for(int i=j;i>=k;--i) #define pc(x) putchar(x) #define fio(x) freopen(#x".in","r",stdin);freopen(#x".out","w",stdout); using namespace std;using ll = long long; namespace ugi{ char c=' '; ll in(void) { ll x=0;bool f=false; while(!isdigit(c)){f^=c=='-';c=getchar();} while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=getchar();} return f?-x:x; } } using ugi::in; const int maxn=10000012; ll a,b,ans=1,cnt[maxn]; bool p[maxn]; void pl(ll& dc) { for(ll i=2;i*i<=dc;++i) { while(dc%i==0){cnt[i]++;dc/=i;} } } int main() { fio(rsa); a=in();b=in(); pl(a);pl(b); if(a==b&&a>1)ans*=3; else { if(a>1)ans*=2; if(b>1)ans*=2; } fru(i,1,10000000) { ans*=cnt[i]+1; } printf("%lld",ans); return 0; }
|