zoukankan      html  css  js  c++  java
  • 3101 阶乘分解 (数学)

    描述

    给定整数 N(1≤N≤10^6),试把阶乘 N! 分解质因数,按照算术基本定理的形式输出分解结果中的 p_i 和 c_i 即可。

    输入格式

    一个整数N。

    输出格式

    N! 分解质因数后的结果,共若干行,每行一对pi, ci,表示含有pi^ci项。按照pi从小到大的顺序输出。

    样例输入

    5

    样例输出

    2 3
    3 1
    5 1

    样例解释

    5! = 120 = 2^3 * 3 * 5

    思路: 对于一个素数在n!里的个数 == n/p + n/p²+ ... n/plogpn   (对于n/p²,本来应该乘上2,但是由于有p之前n/p的时候计算了一次,三次方也类似)

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 
     4 int n;
     5 const int maxn = 1e6+5;
     6 int prime[maxn];
     7 int pi[maxn];
     8 int ci[maxn];
     9 int tot;
    10 void get_pri(int n)
    11 {
    12     bool vis[n+5];
    13     tot = 0;
    14     memset(vis,0,sizeof(vis));
    15     for(int i=2;i<=n;i++)
    16     {
    17         if(!vis[i])prime[++tot] = i;
    18         for(int j=i;j<=n/i;j++)
    19         {
    20             vis[i*j] = 1;
    21         }
    22     }
    23 }
    24 
    25 int main()
    26 {
    27     get_pri(maxn);
    28     scanf("%d",&n);
    29     int i;
    30     for(i=1;i<=tot;i++)
    31     {
    32         if(prime[i] <= n)
    33         {
    34             int lim = log(n)/log(prime[i]);
    35             int t = 1;
    36             pi[i] = prime[i];
    37             for(int j=1;j<=lim;j++)
    38             {
    39                 t *= prime[i];
    40                 ci[i] += n/t;
    41             }
    42         }
    43         else break;
    44     }
    45     for(int j=1;j<i;j++)
    46     {
    47         printf("%d %d
    ",pi[j],ci[j]);
    48     }
    49 }
    View Code
  • 相关阅读:
    numpy库:常用基本
    高考的结束,新的开始
    Hello World!
    第一篇随笔
    Linux命令之文件与用户权限
    看山不是山,看水不是水
    Python基础篇【第1篇】: Python基础
    css居中
    JS正则表达式(一)
    小问题总结
  • 原文地址:https://www.cnblogs.com/iwannabe/p/10693186.html
Copyright © 2011-2022 走看看