zoukankan      html  css  js  c++  java
  • 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(" ");
      }
      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]);
    }

  • 相关阅读:
    函数的设计和使用
    python正则表达式
    Python字符串
    Python序列(十一)集合
    centos 磁盘分区、格式化及挂载
    Nginx下配置SSL证书 调转到IIS、tomcat二级站点
    Mime 类型列表
    WCF学习- 体系结构
    .NET Framework Client Profile 简介
    WCF学习- 基础概念
  • 原文地址:https://www.cnblogs.com/lovychen/p/3188705.html
Copyright © 2011-2022 走看看