【题解】Sumdiv

传送门

根据组合的乘法原理,一个数的所有约数和

\[sum=\prod_{i=1} \Sigma_j^{a_i} p_i^j
\]

所以任务就变成了分解\(A\)的质因数,分解出的\(a_i\)每个乘上一个\(B\)然后套公式就好了。

但是要求一个\(\Sigma_j^{a_i} p_i^j​\),分治就好了了。

写的代码过不去,但是

\(update:\)搞清楚了,特判\(b=0,A=0\)这种情况...duliu

就很绝望

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm> #define int long long
using namespace std;typedef long long ll;
#define DEBUG printf("Passed %s in LINE %d\n",__FUNCTION__,__LINE__)
#define DRP(t,a,b) for(register int t=(a),edd=(b);t>=edd;--t)
#define RP(t,a,b) for(register int t=(a),edd=(b);t<=edd;++t)
#define ERP(t,a) for(register int t=head[a];t;t=e[t].nx)
#define midd register int mid=(l+r)>>1
#define TMP template < class ccf >
#define lef l,mid,pos<<1
#define rgt mid+1,r,pos<<1|1
#define pushup(pos) (seg[pos]=seg[pos<<1]+seg[pos<<1|1])
TMP inline ccf qr(ccf b){
register char c=getchar();register int q=1;register ccf x=0;
while(c<48||c>57)q=c==45?-1:q,c=getchar();
while(c>=48&&c<=57)x=x*10+c-48,c=getchar();
return q==-1?-x:x;}
TMP inline ccf Max(ccf a,ccf b){return a<b?b:a;}
TMP inline ccf Min(ccf a,ccf b){return a<b?a:b;}
TMP inline ccf Max(ccf a,ccf b,ccf c){return Max(a,Max(b,c));}
TMP inline ccf Min(ccf a,ccf b,ccf c){return Min(a,Min(b,c));}
TMP inline ccf READ(ccf* _arr,int _n){RP(t,1,_n)_arr[t]=qr((ccf)1);}
const int mod=9901;
//----------------------template&IO---------------------------
int pr[101];
int ai[101];
int A,B;
int ans=1; inline int ksm(int base,int p){register int ret=1;
for(register int t=p;t;t>>=1,base=(base*base)%mod) if(t&1) ret*=base,ret%=mod;
return ret%mod;
} inline int sum(int base,int n){
if(not n) return 1;
if(n==1) return base%mod+1;
register int sav=sum(base,n>>1);
if(n&1) return sav*(1LL+ksm(base,(n>>1)+1))%mod;
return (sav*(1LL+ksm(base,(n>>1)))%mod-ksm(base,n>>1)%mod+mod)%mod;
} signed main(){
#ifndef ONLINE_JUDGE
freopen("in.in","r",stdin);
freopen("out.out","w",stdout);
#endif
A=qr(1);B=qr(1);
if(not A) return cout<<0<<endl,0;
if(not B) return cout<<1<<endl,0;
for(register int t=2;t*t<=A;++t){
if(A%t==0){
pr[++pr[0]]=t;
while(A%t==0) A/=t,++ai[pr[0]];
}
} if(A>1) pr[++pr[0]]=A,ai[pr[0]]=1;
RP(t,1,pr[0])
ans=ans*sum(pr[t],ai[t]*B)%mod;
cout<<ans<<endl;
return 0;
}

【题解】Sumdiv的更多相关文章

  1. POJ 1845 Sumdiv(求因数和 + 逆元)题解

    题意:给你a,b,要求给出a^b的因子和取模9901的结果. 思路:求因子和的方法:任意A = p1^a1 * p2^a2 ....pn^an,则因子和为sum =(1 + p1 + p1^2 + . ...

  2. 【题解】POJ1845 Sumdiv(乘法逆元+约数和)

    POJ1845:http://poj.org/problem?id=1845 思路: AB可以表示成多个质数的幂相乘的形式:AB=(a1n1)*(a2n2)* ...*(amnm) 根据算数基本定理可 ...

  3. 题解 poj1845 Sumdiv (数论) (分治)

    传送门 大意:求A^B的所有因子之和,并对其取模 9901再输出 (这题又调了半天,把n和项数弄混了QAQ) 根据算数基本定理:A=(p1^k1)*(p2^k2)*(p3^k3)*...*(pn^kn ...

  4. poj 1845 Sumdiv 约数和定理

    Sumdiv 题目连接: http://poj.org/problem?id=1845 Description Consider two natural numbers A and B. Let S ...

  5. POJ 1845 Sumdiv(逆元)

    题目链接:Sumdiv 题意:给定两个自然数A,B,定义S为A^B所有的自然因子的和,求出S mod 9901的值. 题解:了解下以下知识点   1.整数的唯一分解定理 任意正整数都有且只有唯一的方式 ...

  6. POJ 1845 Sumdiv (整数唯一分解定理)

    题目链接 Sumdiv Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 25841   Accepted: 6382 Desc ...

  7. POJ1485 Sumdiv

    Sumdiv Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 22680   Accepted: 5660 Descripti ...

  8. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  9. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

随机推荐

  1. 最短Hamilton路径

    题目描述 给定一张 n(n≤20) 个点的带权无向图,点从 0~n-1 标号,求起点 0 到终点 n-1 的最短Hamilton路径. Hamilton路径的定义是从 0 到 n-1 不重不漏地经过每 ...

  2. Ubuntu 16.04下IntelliJ IDEA菜单显示乱码的问题解决

    说明:这个问题一般是Ubuntu安装时默认使用了中文,而IDEA默认是以系统默认字体为主,所以就会出现乱码:要解决这种问题,就是在IDEA启动时强制设置为英文. 解决方式: 在idea.vmoptio ...

  3. mac为photoshop添加字体

    https://jingyan.baidu.com/article/a3761b2b8484321576f9aaac.html 一. 1)点击Launchpad 2)搜索“字体册” 二 打开字体册 三 ...

  4. 海量数据插入数据库效率对照測试 ---ADO.NET下SqlBulkCopy()对照LINQ 下InsertAllOnSubmit()

    摘要:使用.NET相关技术向数据库中插入海量数据是经常使用操作.本文对照ADO.NET和LINQ两种技术.分别使用SqlBulkCopy()和InsertAllOnSubmit()方法进行操作. 得出 ...

  5. js ioc 实现

    var ar=[]; var o1={ id:'o1', o2:null } ar.push(o1); var o2={ id:'o2', o1:null } ar.push(o2) var ioc= ...

  6. linux中top命令的用法

    收集了两篇关于介绍Linux中监控命令top命令的详细使用方法的文章.总的来说,top命令主要用来查看Linux系统的各个进程和系统资源占用情况,在监控Linux系统性能方面top显得非常有用,下面就 ...

  7. Linux后台进程管理(转)

    fg.bg.jobs.&.ctrl + z命令一. &加在一个命令的最后,可以把这个命令放到后台执行 ,如gftp &,二.ctrl + z可以将一个正在前台执行的命令放到后台 ...

  8. PhoneNumber

    项目地址:PhoneNumber 简介:一个获取号码归属地和其他信息(诈骗.骚扰等)的开源库   一个获取号码归属地和其他信息(诈骗.骚扰等)的开源库.支持本地离线(含归属地.骚扰.常用号码)和网络( ...

  9. apache压缩页面, 全面加速网站

    介绍: 网页压缩来进一步提升网页的浏览速度,它完全不需要任何的成本,只不过是会让您的服务器CPU占用率稍微提升一两个百分点而已或者更少.   原理:   网页压缩是一项由 WEB 服务器和浏览器之间共 ...

  10. canvas图片压缩,局部放大,像素处理

    直接上代码:(具体看注释) 需要引用jquery.min.js <!DOCTYPE html> <html lang="en"> <head> ...