『sumdiv 数学推导 分治』
<更新提示>
<第一次更新>
<正文>
sumdiv(POJ 1845)
Description
给定两个自然数A和B,S为A^B的所有正整数约数和,编程输出S mod 9901的结果。
Input Format
只有一行,两个用空格隔开的自然数A和B(0<=A,B<= 50000000)。
Output Format
只有一行,即S mod 9901的结果。
Sample Input
2 3
Sample Output
15
解析
这是一道数学推导+分治的简单运用,大体思路如下。
由算数基本定理可得:
\]
那么
\]
易知\(A^B\)的约数之和就是:
\]
分解质因数我们是可以简单做到的,由于涉及到取模,在不用逆元的情况下,我们不能直接用等比数列求和公式。
所以我们的问题就转化成了等比数列求和,这是可以利用分治在\(log\)时间内实现的(不涉及除法)。
对于求解\(sum(p,c)=1+p+...+p^c\),可以分解一下:
- 对于c为奇数
\\=(1+p+...+p^{\frac{c-1}{2}})+p^{\frac{c+1}{2}}*(1+p+...+p^{\frac{c-1}{2}})
\\=(1+p^{\frac{c+1}{2}})*sum(p,\frac{c-1}{2})
\]
- 对于c为偶数
\\=(1+p+...+p^{\frac{c}{2}-1})+p^{\frac{c}{2}}*(1+p+...+p^{\frac{c}{2}-1})+p^c
\\=(1+p^{\frac{c}{2}})*sum(p,\frac{c}{2}-1)+p^c
\]
再代回约数和公式,直接利用递归来做分治即可。
\(Code:\)
#include<bits/stdc++.h>
using namespace std;
const int Mod=9901;
long long A,B,p[50],k[50],n,ans=1;
inline void input(void)
{
scanf("%lld%lld",&A,&B);
}
inline void decompose(void)
{
long long temp=A;
for(int i=2;i<=temp;i++)
{
if((temp%i)==0)
{
n++;
p[n]=i;k[n]++;
temp/=i;
while((temp%i)==0)
{
k[n]++;
temp/=i;
}
}
}
for(int i=1;i<=n;i++)
k[i]*=B;
}
inline long long power(long long a,long long b)
{
long long res=1;
for(;b;b>>=1)
{
if(1&b)res=res*a%Mod;
a=a*a%Mod;
}
return res;
}
inline long long sum(long long x,long long y)
{
if(y==1)return x+1;
if(y==0)return 1;
if(y%2==1)
return ((1+power(x,(y+1)/2))%Mod*sum(x,(y-1)/2)%Mod)%Mod;
else return ((1+power(x,y/2))%Mod*sum(x,y/2-1)%Mod+power(x,y)%Mod)%Mod;
}
inline void solve(void)
{
for(int i=1;i<=n;i++)
{
ans*=sum(p[i],k[i])%Mod;
ans%=Mod;
}
}
int main(void)
{
input();
decompose();
solve();
printf("%lld\n",ans%Mod);
}
<后记>
『sumdiv 数学推导 分治』的更多相关文章
- 借One-Class-SVM回顾SMO在SVM中的数学推导--记录毕业论文5
上篇记录了一些决策树算法,这篇是借OC-SVM填回SMO在SVM中的数学推导这个坑. 参考文献: http://research.microsoft.com/pubs/69644/tr-98-14.p ...
- MuPlayer『百度音乐播放内核』
MuPlayer『百度音乐播放内核』 —— 跨平台.轻量级的音频播放解决方案. 多端(PC & WebApp)通用,统一的API调用方式 HTML5 Audio与Flash内核的平滑切换(支持 ...
- 【阿里云产品公测】以开发者角度看ACE服务『ACE应用构建指南』
作者:阿里云用户mr_wid ,z)NKt# @I6A9do 如果感觉该评测对您有所帮助, 欢迎投票给本文: UO<claV RsfTUb)< 投票标题: 28.[阿里云 ...
- 关于不同进制数之间转换的数学推导【Written By KillerLegend】
关于不同进制数之间转换的数学推导 涉及范围:正整数范围内二进制(Binary),八进制(Octonary),十进制(Decimal),十六进制(hexadecimal)之间的转换 数的进制有多种,比如 ...
- 『HTML5梦幻之旅』-缤纷多姿的烟花效果
天花无数月中开,五采祥云绕绛台.堕地忽惊星彩散,飞空旋作雨声来.怒撞玉斗翻晴雪,勇踏金轮起疾雷.更漏已深人渐散,闹竿挑得彩灯回. ——明·瞿佑·<烟火戏> 记得每年过春节的那段时间,除了欣 ...
- UVA - 10014 - Simple calculations (经典的数学推导题!!)
UVA - 10014 Simple calculations Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & ...
- LDA-线性判别分析(二)Two-classes 情形的数学推导
本来是要调研 Latent Dirichlet Allocation 的那个 LDA 的, 没想到查到很多关于 Linear Discriminant Analysis 这个 LDA 的资料.初步看了 ...
- 『NiFi 学习之路』简介
『NiFi 学习之路』简介 『NiFi 学习之路』入门 -- 下载.安装与简单使用 『NiFi 学习之路』资源 -- 资料汇总 『NiFi 学习之路』把握 -- 架构及主要组件 『NiFi 学习之路』 ...
- 『NiFi 学习之路』自定义 —— 组件的自定义及使用
一.概述 许多业务仅仅使用官方提供的组件不能够满足性能上的需求,往往要通过高度可定制的组件来完成特定的业务需求. 而 NiFi 提供了自定义组件的这种方式. 二.自定义 Processor 占坑待续 ...
随机推荐
- 如何编写高效的jQuery代码(转载)
jQuery的编写原则: 一.不要过度使用jQuery 1. jQuery速度再快,也无法与原生的javascript方法相比,而且建立的jQuery对象包含的信息量很庞大.所以有原生方法可以使用的场 ...
- net view ERROR 6118
如上图,使用net view命令出现错误6118(server2012),谷歌百度油管解决了. 尝试1: 把Computer Browser服务打开.https://blog.csdn.net/qq_ ...
- MySql分割字符串【存储过程】
MYSql没有表变量,通过函数无法返回表. 参考网址:https://bbs.csdn.net/topics/330021055 DELIMITER $$ USE `数据库`$$ DROP PROCE ...
- HYPER -V 独立安装的 2016版本 中文版 下载好慢啊
HYPER -V 独立安装的 2016版本 中文版 下载好慢啊
- firefox添加post插件
附加组件 - > 插件 -> 搜索RESTClient
- Cause: java. lang.InstantiationException: tk.mybatis.mapper.provider.base.BaseInsertProvider
相信现在Java Web开发都是用的mybatis吧,而用到mybatis很多人都不会错过通用mapper吧! (纯属瞎扯淡...qwq). 如我上一篇博客所写,目前公司新项目,使用了通用mapper ...
- 如何在HTML表格里定位到一行数据
业务需求: 在这样一个表格里,通过点击"确认"按钮,收集该行数据,向后台发送请求 解决办法 以该button为锚获取父节点,再由父节点获取各个元素的值 获取子元素又有很多办法,包括 ...
- CentOS7x64 防火墙配置
Firewall开启常见端口命令: firewall-cmd --zone=public --add-port=80/tcp --permanent firewall-cmd --zone=publi ...
- sqlzoo:using group by and having
For each continent show the number of countries: SELECT continent, COUNT(name) FROM world GROUP BY c ...
- go 监听系统信号
linux 信号查看 kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFP ...