质因数分解是个用处比较广泛的应用,在各类数学问题方面都可以涉及
因此跟大佬要了份阶乘分解,应用于统计质因数来进行下一步的解题
这个是把阶乘(1–>n)之间的质数统计
eg:
输入:
7
输出:
2 2 2 2 3 3 5 7
我们可以得到有4个2,这代表在7的阶乘1——7中的有四个’2’,既2,4(2×2),6(2×3)分别贡献,其他亦是如此
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define RI register int
using namespace std;
const int sz = 200000 + 5;
int tot,n,p;
bool he[sz];
int prime[sz],cnt[sz];
void find_prime(int n)
{
for(RI i = 2;i <= n;i ++)
{
if(!he[i])
prime[++ tot] = i;
for(RI j = 1;j <= tot && prime[j] * i <= n;j ++)
{
he[prime[j] * i] = 1;
if(i % prime[j] == 0)
break;
}
}
}
void ask_jc(int n)
{
p = 0;
int t = n;
for(RI i = 1;i <= tot && prime[i] <= n;i ++)
{
int c = prime[i];
while(c <= n)
{
cnt[i] += t / c;
c *= c;
p = i;
}
}
}
int main()
{
memset(he,0,sizeof(he));
memset(prime,0,sizeof(prime));
scanf("%d",&n);
find_prime(n);
ask_jc(n);
for(RI i = 1;i <= p;i ++)
if(cnt[i])
{
for(RI j = 1;j <= cnt[i];j ++)
printf("%d ",prime[i]);
}
puts("");
return 0;
}