zoukankan      html  css  js  c++  java
  • 160 Factors and Factorials

    题目大意:

    题目原文:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=3&problem=96&mosmsg=Submission+received+with+ID+11291690

    输入一个数n要将n!分解成各个素数的乘积,输出各个素数因子所乘的次数。

    如:5!=120=2*2*2*3*5;那么就是有三个2,一个3,一个5。

    我的做法是将5!分开=5*4*3*2;然后逐一计算因子数,一个5,一个3, 4有两个2, 2又一个2,然后加起来,就是3个2。

    最早是先把100内的素数都求出来,然后输入n之后从n开始分解。分解的方法是不断除以自己的因子。如100这个数,可以被2整除,则除以2,得到50;然后还是可以被2整除,则继续除以2,得到25;然后可以被5整除,则除以5,得到5;再除以5的到1;分解完成,得到的结果就是2个5,2个2。依次从100分解到2;全部加在一起就可以了。

    附上代码:

    View Code
     1 #include<stdio.h>
     2 int main()
     3 {
     4  int pri[25],n,i,j,bo,a[25];
     5  n=0;
     6  for(i=2;i<=100;i++)//求100内的素数存在pri数组内 
     7  {
     8    bo=0;
     9    for(j=2;j<i;j++)
    10     {
    11      if(i%j==0) {bo=1;break;}
    12     }
    13    if(bo==0) {pri[n]=i;n++;}
    14  }
    15  
    16  while(1)
    17  {
    18   for(i=0;i<=25;i++) a[i]=0;//初始化a数组 
    19   scanf("%d",&n);
    20   if(n==0) break;
    21   printf("%3d! =",n);
    22   while(n>1)//从n循环到2 
    23   {
    24    int nn=n;
    25    for(i=0;i<25;i++)
    26    {
    27     while(nn%pri[i]==0)
    28      {
    29       nn/=pri[i];//不断除以因子直到不能整除 
    30       a[i]++;//每除以一次,计数一次。 
    31      }
    32    }
    33    n--;
    34   }
    35   for(n=24;n>=0;n--)//为了满足后面的0全部不输出,先找出最后一个非0数所在的位置 
    36   {
    37    if(a[n]!=0) break;
    38   }
    39   for(i=0;i<=n;i++)//输出 
    40    {
    41      if(i%15==0&&i!=0) printf("\n      ");//15个要换行(6个空格) 
    42      printf("%3d",a[i]);
    43    }
    44   printf("\n");
    45  }
    46  return 0;
    47 }
  • 相关阅读:
    MetaNamespaceKeyFunc
    golang dlv 调式成员函数
    golang 编译 添加debug gdb
    code-generator
    k8s 自定义informer
    kube-batch ——pod 和task
    kubernetes-handbook informer
    kube batch scheduler
    k8s-scheduler-extender-example
    volcano 快速开始
  • 原文地址:https://www.cnblogs.com/syiml/p/2912859.html
Copyright © 2011-2022 走看看