给定整数 N,试把阶乘 N!分解质因数,按照算术基本定理的形式输出分解结果中的 pi 和 ci 即可。
一个整数 N。
N! 分解质因数后的结果,共若干行,每行一对 pi,ci,表示含有 ci项。按照 pi从小到大的顺序输出。
3≤N≤106
5
- 2 3
- 3 1
- 5 1
5!=120=23∗3∗5
- #include
-
- using namespace std;
-
- const int N = 1e6 + 10;
- int primes[N], cnt;
- bool st[N];
-
- //线性筛素数模板
- void get_primes(int n)
- {
- for(int i = 2; i <= n; i ++)
- {
- if(!st[i]) primes[cnt ++] = i;
-
- for(int j = 0; primes[j] * i <= n; j ++)
- {
- st[primes[j] * i] = true;
- if(i % primes[j] == 0) break;
- }
- }
- }
-
- //获取n!中x的次数
- int get(int n, int x)
- {
- int res = 0;
-
- while(n)
- {
- res += n / x;
- n /= x;
- }
- return res;
- }
-
- int main()
- {
- int n;
- cin >> n;
-
- get_primes(n);
-
- for(int i = 0; i < cnt; i ++)
- {
- int t = get(n, primes[i]);
- if(t >= 1) cout << primes[i] << ' ' << t << endl;
- }
-
- return 0;
- }