zoukankan      html  css  js  c++  java
  • AcWing 197. 阶乘分解 (筛法)打卡

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

    输入格式

    一个整数N。

    输出格式

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

    数据范围

    1N1061≤N≤106

    输入样例:

    5
    

    输出样例:

    2 3
    3 1
    5 1

    筛法应用:https://www.luogu.org/blog/top-oier/xian-xing-shai-fa-qiu-su-shuo
    题意:我们要求一个阶乘里面化成最简质因子相乘的每个质因子个数是多少
    思路:我们肯定不能一个一个数单独求,我们应该一个一个范围求质因子个数是多少,我们先用筛法求出给定范围内的质数
    然后比如我们要求给定范围的偶数多少个,那其实就是/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
    ",prime[i],sum);
        }
    }
  • 相关阅读:
    UVA 439 Knight Moves
    UVA 673 Parentheses Balance
    UVa 536 Tree Recovery
    UVA 712 S-Trees
    UVA 12657 Boxes in a Line
    UVA 679 Dropping Balls
    UVA 1603 Square Destroyer
    UVA 1343 The Rotation Game
    UVA 1374 Power Calculus
    UVA 12558 Egyptian Fractions (HARD version)
  • 原文地址:https://www.cnblogs.com/Lis-/p/10994940.html
Copyright © 2011-2022 走看看