思路 1 生成素数数组 (2,3,5,7)
2 循环将每个阶乘除以素数数组 如 1%2 2%2 3%2 3%3....
#include <iostream>
#include <stdlib.h>
using namespace std;
int prime[100],count=0;
bool is_prime(int n)
{
int i=0;
for (i=2;i*i<=n;i++)
{
if (n%i==0)
{
return false;
}
}
return true;
}
int main(void)
{
int n,p[100];
for (int i=2;i<100;i++)
{
if (is_prime(i))
{
prime[count++]=i;
}
}
while (scanf("%d",&n)==1)
{
int maxp=0;
memset(p,0,sizeof(p));
printf("%d!= ",n);
for (int i=1;i<=n;i++)
{
int m=i;
for (int j=0;j<count;j++)
{
while (m%prime[j]==0)
{
m/=prime[j];
p[j]++;
if (j>maxp)
{
maxp=j;
}
}
}
}
for (int i=0;i<=maxp;i++)
{
printf("%d ",p[i]);
}
printf("\n");
}
getchar();
return 0;
}