ny509 因子和阶乘

因子和阶乘

时间限制:1000 ms  |  内存限制:65535 KB
难度:2
 
描述
给你一个正整数n,把n!=1x2x3x.....xn分解成素因子相乘的形式,并从小到大输出每个素因子的指数,但要保证最后输出的素因子个数不为0。例如825应表示为0,1,2,0,1表示分别有0,1,2,0,1个2,3,5,7,11。
 
输入
第一行有一个整数n(0<n<10000),表示有n组测试数据;
接下来n行每行有一个整数 m(1<m<10000)
输出
从小到大输出m分解成素因子相乘后各个素因子对应的指数
样例输入
2
5
53
样例输出
3 1 1
49 23 12 8 4 4 3 2 2 1 1 1 1 1 1 1 

讲解:大概意思就是看n的阶乘中是用多少个素数的多少次方算的 例如825=3*52*11所以是一个3,两个5

,一个11,然后再统计824;以此类推

代码如下:

#include<stdio.h>
#include<math.h>
#include<string.h>
int a[10000];
int main()
{
 void fun();
 int m,n,i,j,t,b[10010];
 fun();
  scanf("%d",&t);
  while(t--)
  {
   memset(b,0,sizeof(b));
   scanf("%d",&n);
   for(i=n;i>=2;i--)
   {
    for(j=0;a[j]<=i;j++)
    {  m=i;
     while(m%a[j]==0)
     {
      b[a[j]]++;
      m=m/a[j]; 
     }
    }
   }
    for(i=0;a[i]<=n;i++)
     if(b[a[i]])
      printf("%d ",b[a[i]]);
     printf("\n");
  }
  return 0;
}
void fun()
{
 int i,m,k,c=1,j;
 a[0]=2;
 for(i=3;i<=10000;i++)
 { k=0;
  m=i;
  for(j=2;j<=sqrt(m);j++)
   if(m%j==0)
   {
    k=1;
    break;
   }
   if(k!=1)
    a[c++]=i;  
 }
// for(i=0;i<=10000;i++)
//  printf("%d ",a[i]);
}

posted on 2013-07-13 21:54  细雨微光  阅读(366)  评论(0)    收藏  举报