階乘分解
阿新 • • 發佈:2018-12-03
問題 A: 階乘分解
時間限制: 1 Sec 記憶體限制: 128 MB
題目描述
給定整數N(1≤N≤10^6),試把階乘N!分解質因數,按照算術基本定理的形式輸出分解結果中的pi和ci即可。
輸入
一個整數N。
輸出
N! 分解質因數後的結果,共若干行,每行一對pi, ci,表示含有pi^ci項。按照pi從小到大的順序輸出。
樣例輸入
複製樣例資料
5
樣例輸出
2 3 3 1 5 1
提示
5! = 120 = 2^3 * 3 * 5
篩素數,求<=N的所有素數出現的個數
/**/ #include <cstdio> #include <cstring> #include <cmath> #include <cctype> #include <iostream> #include <algorithm> #include <map> #include <set> #include <vector> #include <string> #include <stack> #include <queue> typedef long long LL; using namespace std; int prim[80005], vis[1000005], n, tot; void get_prim(int x){ for (int i = 2; i <= x; i++){ if(!vis[i]) prim[tot++] = i; for (int j = 0; j < tot && prim[j] * i <= x; j++){ vis[prim[j] * i] = 1; if(i % prim[j] == 0) break; } } } int main() { //freopen("in.txt", "r", stdin); //freopen("out.txt", "w", stdout); scanf("%d", &n); get_prim(n); for (int i = 0; i < tot; i++){ LL t = prim[i]; //注意t可能超過int型 LL ans = 0;// 同上 while(t <= (LL)n){ ans += n / t; t *= prim[i]; } printf("%d %lld\n", prim[i], ans); } return 0; } /**/