输入正整数n,把n!分解成素因子相乘的形式。从小到大输出素因子的指数,要忽略最大素因子之后的素数的指数
same input
5
same output
5!=3 1 1
具体要求:白书p82
代码如下:
#include<stdio.h>
#include<iostream>
#include<cmath>
#include<cstring>
#define LL long long
using namespace std;
int prime[100000]={0};
bool vis[100000];
void creat_prime()
{
int i,j,k;
int m;
m=sqrt(100000+0.5);
memset(vis,0,sizeof(vis));
j=0;
for(i=2;i<=m;i++)
{
if(vis[i]==false)
{
prime[j++]=i;
for(k=i+i;k<=100000;k=k+i)
vis[k]=true;
}
}
for(i=m+1;i<=100000;i++)
{
if(vis[i]==false)
prime[j++]=i;
}
}
int main()
{
LL sum;
int place[10000]={0};
int n;
int i,j,k;
int cnt;
int t;
int temp;
int position=0;
creat_prime();
while(scanf("%d",&n)!=EOF)
{
printf("%d! = ",n);
memset(place,0,sizeof(place));
int maxposition=0;
for(i=1;i<=n;i++)
{
int m=i;
for(j=0;j<=100;j++)
while(m%prime[j]==0)
{
m/=prime[j];
place[j]++;
if(j>maxposition)
maxposition=j;
}
}
for(i=0;i<=maxposition;i++)
printf(" %d",place[i]);
printf("\n");
}
return 0;
}