1 条题解
-
0
问题转化为可重复排列数。
对于给定的n,将其进行质因数分解为n = p1^a1 * p2^a2 * ... * pk^ak,其中p1, p2, ..., pk为不同的质因数,a1, a2, ..., ak为对应的指数。
可重复排列数的长度len为各指数之和,即len = a1 + a2 + ... + ak。
可重复排列数的计算公式为:ans = len! / (a1! * a2! * ... * ak!)。
/* 问题转化为可重复排列数 n=p1^a1 *p2^a2 ……pk^ak len=a1+a2+a3……+ak ans= fac[len] / ( fac[a1]*fac[a2]*……*fac[ak] ) */ #include <bits/stdc++.h> using namespace std; typedef unsigned long long ULL; ULL fac[25]; int main() { fac[0]=1;for(int i=1;i<=20;i++) fac[i]=fac[i-1]*i; int n; while(scanf("%d", &n)!=EOF) { int len=0; ULL s=1; for(int i=2;i*i<=n;i++)if(n%i==0) { int t=0; while(n%i==0){n/=i;t++;} len+=t; s*=fac[t]; } if(n>1)len++; ULL ans=fac[len]/s; printf("%d %llu\n", len, ans); } return 0; }
- 1
信息
- ID
- 1769
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 6
- 标签
- 递交数
- 156
- 已通过
- 44
- 上传者