码迷,mamicode.com
首页 > 编程语言 > 详细

【算法竞赛进阶指南】POJ1845Sumdiv

时间:2018-12-03 13:58:21      阅读:682      评论:0      收藏:0      [点我收藏+]

标签:oid   tpc   约数   分解质因数   一个   i++   str   项目   name   

本题目是一道数论的综合题目,主要的一个点就是利用二分法来求等比数列的和,其余的点就是唯一分解定理分解质因数,还有就是快速幂

A^B约数和\(=(1+p_{1}+p_{1}^{2}+\cdot\cdot\cdot+p_{1}^{c1})*(1+p_{2}+p_{2}^{2}+\cdot\cdot\cdot+p_{2}^{c2})*\cdot\cdot\cdot*(1+p_{n}+p_{n}^{2}+\cdot\cdot\cdot+p_{n}^{cn})\)

如果c是奇数(一共有偶数项)\(sum(p,c)=(1+p+p^{2}+p^{3}+\cdot\cdot\cdot+p^{\frac{c-1}{2}})+(p^{\frac{c+1}{2}}+\cdot\cdot\cdot+p^{c})\\ =(1+p+p^{2}+p^{3}+\cdot\cdot\cdot+p^{\frac{c-1}{2}})+p^{\frac{c+1}{2}}(1+p+p^{2}+p^{3}+\cdot\cdot\cdot+p^{\frac{c-1}{2}}) \\=(1+p^{\frac{c+1}{2}})(1+p+p^{2}+p^{3}+\cdot\cdot\cdot+p^{\frac{c-1}{2}})\\=(1+p^{\frac{c+1}{2}})sum(p,\frac{c-1}{2})\)

如果c是偶数(一共有奇数项目)我们把最后一项单独提出来,然后跟偶数项一样处理\(sum(p,c)=sum(p,c-1)+p^{c}\)

#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long ll;
const int mod=9901;
int p[10010],c[10010];
int m;

ll quick_pow(ll a,ll b){//快速幂
    ll ans=1,base=a;
    while(b){
        if(b&1) ans=(ans*base)%mod;
        base=(base*base)%mod;
        b>>=1;
    }
    return ans;
}

void divide(int n){//分解质因数
    m=0;
    for(int i=2;i<=sqrt(n);i++){
        if(n%i==0){
            p[++m]=i,c[m]=0;
            while(n%i==0) n/=i,c[m]++;
        }
    }
    if(n>1)
        p[++m]=n,c[m]=1;
}

ll sum(ll dp,ll dc){
    //二分法求等比数列和
    if(dp==0) return 0;
    if(dc==0) return 1;
    if(dc&1){//c奇数
        return ((1+quick_pow(dp,dc/2+1))%mod*sum(dp,dc/2)%mod)%mod;
    }else{//c偶数
        return ((1+quick_pow(dp,dc/2))%mod*sum(dp,dc/2-1)+quick_pow(dp,dc))%mod;
    }
}

int main(){
    int a,b;
    while(cin>>a>>b){
    divide(a);//将底数分解
    int ans=1;
    for(int i=1;i<=m;i++){
        ans=(ans*sum(p[i],c[i]*b)%mod)%mod;
    }
    cout<<ans<<"\n";
    }
    return 0;
}

【算法竞赛进阶指南】POJ1845Sumdiv

标签:oid   tpc   约数   分解质因数   一个   i++   str   项目   name   

原文地址:https://www.cnblogs.com/rign/p/10057769.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!