2018.10.26 poj3421X-factor Chains(數論+排列組合)
阿新 • • 發佈:2018-10-31
傳送門
排列組合入門題。
令
那麼答案1就等於
答案2等於
邊分解質因數邊統計就行了。
程式碼:
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int N=1e6+5;
int tot=0,n,pri[N];
bool vis[N];
long long ans1,ans2,fac[25];
inline void init(){
fac[0]=1;
for(int i=1;i<=20;++i)fac[i]=fac[i-1]*i;
for(int i=2;i<=1e6;++i){
if(!vis[i])pri[++tot]=i;
for(int j=1;j<=tot&&i*pri[j]<=1e6;++j){
int k=i*pri[j];
vis[k]=1;
if(!(i%pri[j]))break;
}
}
}
int main(){
init();
while(~scanf("%d",&n)){
ans1=0,ans2=1;
for(int i=1;pri[i]*pri[i]<=n;++i){
if(!(n^1))break;
int a=pri[i],b=0;
if(n!=n/a*a)continue;
while(n==n/a*a)n/=a,++b;
ans1+=b,ans2*=fac[b];
}
if(n^1)++ans1;
cout<<ans1<<' '<<fac[ans1]/ans2<<'\n';
}
return 0;
}