zoukankan      html  css  js  c++  java
  • 因子和(洛谷P1593)——约数和+分解质因数

    题目:

    求A^B所有约数和(A,B<=5e7)

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    #define N 40
    #define mod 9901
    ll num[N],p[N];
    int cnt=0;
    ll quick_pow(ll a,ll k)
    {
        ll ans=1;
        while(k){
            if(k&1) ans=ans*a %mod;
            a=a*a %mod;
            k>>=1;
        }
        return ans;
    }
    void devide(ll a)
    {
        for(int i=2;i*i<=a;i++)//根号n地分解质因数 
        if(a%i==0){
            p[++cnt]=i;
            while(a%i==0) a/=i,num[cnt]++;
        }
        if(a>1) p[++cnt]=a,num[cnt]++;//防止a是质数 
    }
    int main()
    {
        ll a,b,ans=1;
        scanf("%lld%lld",&a,&b);
        devide(a);//printf("cnt:%d
    ",cnt);
        for(int i=1;i<=cnt;i++){
            if( (p[i]-1) %mod==0 ) ans=ans*(num[i]+1) %mod;//额外讨论p[i]-1整除mod的情况 这时候它没有逆元
            //p[i]-1 (=) mod  则 p[i] (=) 1 (%mod) 原式就转换成了b*num[i]+1个1相加 
            else{
                ll x=quick_pow(p[i],num[i]*b+1), inv=quick_pow(p[i]-1,mod-2) ;
                ans=ans*(x-1) %mod *inv %mod;
            }
        }
        printf("%lld
    ",ans);
    }
    /*
    10000000 10000000
    */
  • 相关阅读:
    BOZJ2200: [Usaco2011 Jan]道路和航线
    poj3662
    网络流
    最短路
    约瑟夫环
    二分图匹配
    HDU 3938 Portal
    背包dp专题训练
    noip2013day1模拟赛
    2017.10.24:lca专题系列
  • 原文地址:https://www.cnblogs.com/mowanying/p/11426267.html
Copyright © 2011-2022 走看看