Acwing 197. 阶乘分解

给定整数 N ,试把阶乘 N! 分解质因数,按照算术基本定理的形式输出分解结果中的 pipi 和 cici 即可。

输入格式

一个整数N。

输出格式

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

数据范围

1N1061≤N≤106

输入样例:

5

输出样例:

2 3
3 1
5 1

样例解释

5!=120=2335

 思路:

  1. 既然是找质因数的个数,我们就先把到n的所有素数筛出来;
  2. 每个素数在N!里的个数就是(n/p+n/p^2+n/p^3......)
#include <bits/stdc++.h>

using namespace std;
typedef long long ll;

const int N= 1e6+10;
int v[N],prime[N];
int c[N];
int cun =0;
int n;
int primes(int n)
{
    for(int i=2;i<=n;i++)
    {
        if(!v[i])
        {
            v[i]=i;
            prime[cun++]=i;
        }
        for(int j =0;j<cun;j++)
        {
            if(prime[j]>n/i||prime[j]>v[i])break;
            v[i*prime[j]]=prime[j];
        }
    }
}
int main()
{
    cin >>n;
    primes(n);
    for(int i=0;i<cun;i++)
    {
        long long p =1;
        while(p<=n)
        {
            p*=prime[i];
            c[prime[i]]+=n/p;
        }
    }
    for(int i=0;i<cun;i++)
    {
        if(c[prime[i]]!=0)
        {
            cout <<prime[i]<<' '<<c[prime[i]]<<endl;
        }
    }
}
你的脸上风淡云轻,谁也不知道你的牙咬得有多紧。你走路带着风,谁也不知道你膝盖上仍有曾摔过的伤的淤青。你笑得没心没肺,没人知道你哭起来只能无声落泪。要让人觉得毫不费力,只能背后极其努力。我们没有改变不了的未来,只有不想改变的过去。
原文地址:https://www.cnblogs.com/wangzhe52xia/p/11377760.html