给定整数 N ,试把阶乘 N! 分解质因数,按照算术基本定理的形式输出分解结果中的 pipi 和 cici 即可。
输入格式
一个整数N。
输出格式
N! 分解质因数后的结果,共若干行,每行一对pi,cipi,ci,表示含有pciipici项。按照pipi从小到大的顺序输出。
数据范围
1≤N≤1061≤N≤106
输入样例:
5
输出样例:
2 3
3 1
5 1
样例解释
5!=120=23∗3∗5
思路:
- 既然是找质因数的个数,我们就先把到n的所有素数筛出来;
- 每个素数在N!里的个数就是(n/p+n/p^2+n/p^3......)
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N= 1e6+10; int v[N],prime[N]; int c[N]; int cun =0; int n; int primes(int n) { for(int i=2;i<=n;i++) { if(!v[i]) { v[i]=i; prime[cun++]=i; } for(int j =0;j<cun;j++) { if(prime[j]>n/i||prime[j]>v[i])break; v[i*prime[j]]=prime[j]; } } } int main() { cin >>n; primes(n); for(int i=0;i<cun;i++) { long long p =1; while(p<=n) { p*=prime[i]; c[prime[i]]+=n/p; } } for(int i=0;i<cun;i++) { if(c[prime[i]]!=0) { cout <<prime[i]<<' '<<c[prime[i]]<<endl; } } }