【题意】输入n,输出n的阶乘的素因数
【样例】
输入n=10
输出素数+个数
2:8 3:4 5:2 7:1
#include<iostream>
#include<cstring>
#include<math.h>
using namespace std;
int prime[100000];
int mark[100000];
int primesize;
void ini()
{
int i,j;
primesize=0;
memset(mark,false,sizeof(mark));
for(i=2;i<100000;i++)
{
if(mark[i])continue;
prime[primesize++]=i;
if(i>=1000)continue;
for(j=i*i;j<100000;j+=i)
mark[j]=true;
}
}
int main(int argc, char const *argv[])
{
ini();
int n,i,bound;
cin>>n;
int ans[100000];
memset(ans,0,sizeof(ans));
for(i=0;i<primesize;i++)
{
int t=n;
if(t/prime[i]==0)break;//如果该素数比n还大,则不可能是它的素因数
while(t)
{
ans[prime[i]]+=t/prime[i];
t=t/prime[i];
}
}
for(i=0;i<primesize;i++)
{
if(ans[i]>0)
cout<<i<<":"<<ans[i]<<" ";
}
return 0;
}