AcWing 197. 阶乘分解 (筛法)打卡

Posted lis-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AcWing 197. 阶乘分解 (筛法)打卡相关的知识,希望对你有一定的参考价值。

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

输入格式

一个整数N。

输出格式

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

数据范围

1N1061≤N≤106

输入样例:

5

输出样例:

2 3
3 1
5 1


题意:我们要求一个阶乘里面化成最简质因子相乘的每个质因子个数是多少
思路:我们肯定不能一个一个数单独求,我们应该一个一个范围求质因子个数是多少,我们先用筛法求出给定范围内的质数
然后比如我们要求给定范围的偶数多少个,那其实就是/2即可,能被3取余,4取余也是一样的道理,
又 1-10 取出5个2因子后就变成了 (2 4 6 8 10)/2 -》 (1,2,3,4,5)然后这里可以再出,反复进行这个操作得出有多少个2因子

#include<bits/stdc++.h>
#define maxn 1000005
#define mod 1000000007
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
int prime[maxn];
int vis[maxn];
int num;
map<ll,ll> mp;
void shai(ll r)
    vis[1]=1;
    for(int i=2;i<=r;i++)
        if(vis[i]==0)
            prime[num++]=i;
            for(int j=2*i;j<=r;j+=i)
                vis[j]=1; 
             
        
    

int main()
    ll n;
    scanf("%lld",&n);
    shai(n);
    for(int i=0;i<num;i++)
        if(prime[i]>n) break;
        ll w=n;
        ll sum=0;
        while(w)
            sum+=w/prime[i];
            w/=prime[i];
        
        printf("%lld %lld\n",prime[i],sum);
    

 

以上是关于AcWing 197. 阶乘分解 (筛法)打卡的主要内容,如果未能解决你的问题,请参考以下文章

AcWing 197. 阶乘分解 质因数分解

197. 阶乘分解数论

第五章 数学知识

197. 阶乘分解数论

数论-质数 poj2689,阶乘分解

分解质因数(线性筛)