zoukankan      html  css  js  c++  java
  • 阶乘分解质因数

    给定整数N(1<=N<=10^6),试把N!分解成质因数,按照算数基本定理的形式输出分解结果中的pi和ci


    这样分析的话,其实把阶乘算出来再搞是必然超时的

    对于每个质因子p,就相当于1N每个数包含的质因子p的和。在1Nz中包含1个质因子的有N/p个,p2则为N/p2,,,,,以此类推

    所以N!中质因子的个数:

    n/p+n/p2+n/p3.......

    #include <iostream>
    #include <stack>
    #include<algorithm>
    #include <cstring>
    #include <stdio.h>
    #include <string.h>
    #define ll long long
    using namespace std;
    const int N = 1e6 + 5;
    ll n;
    ll vis[N],p[N],c[N];
    ll cnt ;
    int main() {
    
        cin >> n;
        for (ll i = 2; i <= n; i++) {
            if (!vis[i]) {
                ll num = 0;
                for (ll j = i; j <= n; j *= i) num += n / j;
                    p[++cnt] = i;
                c[cnt] = num;
                for (ll j = i * i; j <= n; j += i)//素数筛啊啊啊啊!!保证那个i是个质数
                    vis[j] = 1;
            }
        }
        for (int i = 1; i <= cnt; i++) cout << p[i] << " " << c[i] << '
    ';
        return 0;
    }
    
    为了自己,和那些爱你的人
  • 相关阅读:
    nginx启动失败
    Windows下载安装docker详细步骤
    Consul
    Idea导入多个maven项目到同一目录下
    使用V-chart时踩过的一些坑
    java集合超详解
    HashMap
    curl和wget的区别和使用
    SourceTree3.2.6版本跳过注册办法
    单点登录
  • 原文地址:https://www.cnblogs.com/zhmlzhml/p/14327682.html
Copyright © 2011-2022 走看看