因子和阶乘

输入正整数n(2<=n<=100),把阶乘n!=1 X 2 X 3 X 4 X 5 X …… X n分解成素因子相乘的形式。从小到大输出素数(2,3,5,……)的指数。

一种可行的算法:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>

int is_prime(int n)                                 //判断素数
{
 for(int i = 2;i*i <= n;i++)
  if(n % i == 0) return 0;
 return 1;
}
int prime[100], count = 0;

int main()
{
 int n,p[100];
 for(int i = 2; i <= 100;i++)                               //构造素数表
  if(is_prime(i)) prime[count++] = i;
 while(scanf("%d",&n))
 {
  printf("%d! = ",n);
  memset(p,0,sizeof(p));
  int maxp = 0;
  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");
 }
 system("pause");
 return 0;
}

算法思想简单,关键在于利用素数表来遍历计算。

你可能感兴趣的:(阶乘,因子)