197. 阶乘分解
作者:
WindSkyEnd
,
2025-05-09 10:53:47
· 山东
,
所有人可见
,
阅读 2
求 阶乘 的 质因子分解
这三行是关键,并且在每次循环新的质因子时,都要是对n进行操作,分解的核心是除p得到的是p的一次倍的因子数量,但是还可能有二次倍或者高次倍数,所以操作完一次后t /= p,再进行操作
while(t){
s += t/p;
t /= p;
}
#include <bits/stdc++.h>
#define debug(x) cout << '!' << (x) << '!' << endl
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
ll n;
const int N = 1e6+10;
int prime[N] ,cnt;
bool st[N];
void get_primes(int n){
for(int i = 2 ; i <= n ; i++){
if(!st[i]) prime[++cnt] = i;
for(int j = 1 ; prime[j] <= n / i ; j++){
st[prime[j]*i] = true;
if(i%prime[j]==0) break;
}
}
}
int main(){
cin >> n;
get_primes(n);
for(int i = 1 ; i <= cnt ; i++){
int p = prime[i];
int s = 0 , t = n;
while(t){
s += t/p;
t /= p;
}
cout <<p << ' '<<s << endl;
}
}