zoukankan      html  css  js  c++  java
  • 南阳nyoj 509 因子和阶乘

    因子和阶乘

    时间限制: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!,如果可以转化成整数,那可以用以前的知识解决了。但是
    N很大的时候,就不行了。
    理论依据:
    也可以写成
    num=[N/pi^1]+ [N/pi^2]+ …… + [N/pi^n]  其中[]为取整
    求N!有几个要注意的地方。
    1.最大的质因子不会超过N,
    2.关于公式的转化:
    式子中把一些东西看成一个整体。举例:
    num=N/pi^1+N/pi^2+N/pi^3;
    ==>
    N/p1^1+(N/p1^1)/p1^1+((N/p1^1)/p1^1)/p1^1;
    这样的话就可以写成一个solve函数。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstdlib>
     4 #include<cstring>
     5 using namespace std;
     6 
     7 
     8 bool s[10003];
     9 int prime[10003],len;
    10 int Flag;
    11 
    12 void make_prime()//素数获取
    13 {
    14     int i,j;
    15     len=0;
    16     for(i=2;i<=10000;i++)
    17     if(s[i]==false)
    18     {
    19         prime[++len]=i;
    20         for(j=i*2;j<=10000;j=j+i)
    21         s[j]=true;
    22     }
    23 }
    24 
    25 void solve(int n,int m)//num=[N/pi^1]+ [N/pi^2]+ …… + [N/pi^n]
    26 {
    27     int i,k=0;
    28     while(n)
    29     {
    30         n=n/m;
    31         k=k+n;
    32     }
    33     if(Flag==0)
    34     {
    35         printf("%d",k);
    36         Flag=1;
    37     }
    38     else printf(" %d",k);
    39 }
    40 
    41 int main()
    42 {
    43     int T,n,i;
    44     make_prime();
    45     while(scanf("%d",&T)>0)
    46     {
    47         while(T--)
    48         {
    49             scanf("%d",&n);
    50             Flag=0;
    51             for(i=1;prime[i]<=n;i++)
    52             solve(n,prime[i]);
    53             printf("
    ");
    54         }
    55     }
    56     return 0;
    57 }
    
    
    
    
    
  • 相关阅读:
    Win7最高权限问题
    UNEDI/FACT基础知识
    关于display
    sql server 复制需要有实际的服务器名称才能连接到服务器
    ANSI ASC X12标准学习指南
    Eclipse插件的安装方法
    PB DataWindow的38个技巧
    Java API 帮助文档中英文版下载
    用快捷方式在Windows2008下安装新字体的技巧
    sqlserver 性能分析报表
  • 原文地址:https://www.cnblogs.com/tom987690183/p/3251003.html
Copyright © 2011-2022 走看看