阶乘分解

题目链接:阶乘分解
分解阶乘的质因数。
将1~N每个数,分别分解质因数合并的时间复杂度是O(N\sqrt N)
对于N!来说假设p<N,并且p是质数。那么N!以p为质因数的数有,p,2*p,...,\lfloor \frac N p \rfloor*p一共是\lfloor \frac N p \rfloor个,每个都至少包含了一个质因子p。至少包含两个质因数的是\lfloor \frac N {p^2} \rfloor\lfloor \frac N {p^2} \rfloor最少包含两个质因子p,不过其中一个质因子已经被\lfloor \frac N p \rfloor统计过一次。
N!中质因子p的个数是\lfloor \frac N p \rfloor+\lfloor \frac N {p^2} \rfloor+\lfloor \frac N {p^3} \rfloor+...
时间复杂度大概是O(n\log n)

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
const int N = 1000010;
vector<int> p;
bool v[N];
void get_prime(int n){
    for(int i = 2;i<=n;i++){
        if(v[i]==0)p.push_back(i);
        for(int j = 0;i*p[j]<=n;j++){
            v[i*p[j]]=1;
            if(i%p[j]==0)break;
        }
    }
}
int main(){
    
    int n;
    cin>>n;
    get_prime(n);
    for(int i = 0;p[i]<=n&&i<p.size();i++){
        int ans = 0;
        for(int k = n;k;k/=p[i]){
            ans+=k/p[i];
        }
        cout<<p[i]<<" "<<ans<<endl;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问题陈述 给定一个整数N,N的阶乘N!中末尾有多少个0? N! 的二进制表示中最低位1的位置? 问题1的O(N2)...
    HITMiner阅读 2,744评论 0 0
  • 在编程中遇到很多Math相关的问题都可以转换为求n的阶乘中含有某个数的个数;例如这道: 这道题的解题关键是:分解因...
    pw007992阅读 8,876评论 0 0
  • 数据信息安全对我们每个人都有很重要的意义,特别是一些敏感信息,可能一些类似于收货地址、手机号还没引起大家的注意。但...
    metabolism阅读 3,971评论 0 0
  • 首文发表在 172. 阶乘后的零 题目描述 给定一个整数 n,返回 n! 结果尾数中零的数量。 示例 1: 示例 ...
    IOneStar阅读 3,328评论 0 0
  • 对一个整数进行分解质因数。方法一:暴力: 方法二:Pollard Rho算法时间复杂度为n^0.25 原文请点击这...
    Gitfan阅读 6,771评论 0 1