【题解】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. springboot 2.0.8 跳转html页面

    springboot项目创建链接 https://blog.csdn.net/q18771811872/article/details/88126835 springboot2.0 跳转jsp教程 h ...

  2. smartsvn学习(-)

    3. Day-to-day use 3.1 Everyday commands Most of the common commands you will need are in the SmartSV ...

  3. 【报错】项目启动,仅仅报错 One or more listeners failed to start. Full details will be found in the appropriate container log file

    今天spring4.3.13 项目,整合ActiveMQ的时候,项目启动在自动部署到tomcat下的时候,不能正常的部署,仅仅报错如下: Connected to server [-- ::,] Ar ...

  4. Flume NetCat Demo

    准备工作: 1.apache官网下载flume 2.解压flume 3.修改flume-env.sh,配置JAVA_HOME NetCat采集Demo: 1.在conf中创建netcat-logger ...

  5. 好工具MyEclise2016 CI下载

    地址:http://pan.baidu.com/s/1gfBw9Ab 安装后,点开crack目录,按步骤走. 下面是我安装成功的画面.

  6. Linux系统编程_1_文件夹读取(实现简单ls命令)

    闲来无事.随便写写,实现简单的ls命令: | 1 #include <stdio.h> | 2 #include <stdlib.h> | 3 #include <dir ...

  7. Windows:小技巧

    点击右键,选择打开方式的时候,列表修改:单击“开始→运行”,输入Regedit,打开注册表编辑器,定位到如下分支: HKEY_CURRENT_USER\Software\ Microsoft\Wind ...

  8. UTF-8 可变编码格式

    转自:http://blog.csdn.net/swedenfeng/article/details/53467720   UTF-8 是一种可变编码格式,长度从一个字节到四个字节,可根据UTF-8字 ...

  9. Linux视频培训教程

    很详尽的Linux培训教程,既包含日常工作常常要用到的实践及技巧,又包含Linux认证及系统管理及架构,讲的很不错.最关键的.这么具体,完整的教程还是免费的.花了点时间拿它整理了下. 第一部分: Li ...

  10. c++实现二叉搜索树

    自己实现了一下二叉搜索树的数据结构.记录一下: #include <iostream> using namespace std; struct TreeNode{ int val; Tre ...