<更新提示>

<第一次更新>


<正文>

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=p_1^{a_1}*p_2^{a_2}*...*p_k^{a_k}=\prod_{i=1}^kp_i^{a_i}
\]

那么

\[A=p_1^{a_1B}*p_2^{a_2B}*...*p_k^{a_kB}=\prod_{i=1}^kp_i^{a_iB}
\]

易知\(A^B\)的约数之和就是:

\[ans=(1+p_1+p_1^2+...+p_1^{a_1B})*...*(1+p_k+p_k^2+...+p_k^{a_kB})\\=\prod_{i=1}^{k}(1+p_i+p_i^2+...+p_i^{a_iB})\\=\prod_{i=1}^{k}\sum_{j=0}^{a_iB}p_i^j
\]

分解质因数我们是可以简单做到的,由于涉及到取模,在不用逆元的情况下,我们不能直接用等比数列求和公式。

所以我们的问题就转化成了等比数列求和,这是可以利用分治在\(log\)时间内实现的(不涉及除法)。

对于求解\(sum(p,c)=1+p+...+p^c\),可以分解一下:

  • 对于c为奇数

\[sum(p,c)=1+p+...+p^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为偶数

\[sum(p,c)=1+p+...+p^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 数学推导 分治』的更多相关文章

  1. 借One-Class-SVM回顾SMO在SVM中的数学推导--记录毕业论文5

    上篇记录了一些决策树算法,这篇是借OC-SVM填回SMO在SVM中的数学推导这个坑. 参考文献: http://research.microsoft.com/pubs/69644/tr-98-14.p ...

  2. MuPlayer『百度音乐播放内核』

    MuPlayer『百度音乐播放内核』 —— 跨平台.轻量级的音频播放解决方案. 多端(PC & WebApp)通用,统一的API调用方式 HTML5 Audio与Flash内核的平滑切换(支持 ...

  3. 【阿里云产品公测】以开发者角度看ACE服务『ACE应用构建指南』

    作者:阿里云用户mr_wid ,z)NKt#   @I6A9do   如果感觉该评测对您有所帮助, 欢迎投票给本文: UO<claV   RsfTUb)<   投票标题:  28.[阿里云 ...

  4. 关于不同进制数之间转换的数学推导【Written By KillerLegend】

    关于不同进制数之间转换的数学推导 涉及范围:正整数范围内二进制(Binary),八进制(Octonary),十进制(Decimal),十六进制(hexadecimal)之间的转换 数的进制有多种,比如 ...

  5. 『HTML5梦幻之旅』-缤纷多姿的烟花效果

    天花无数月中开,五采祥云绕绛台.堕地忽惊星彩散,飞空旋作雨声来.怒撞玉斗翻晴雪,勇踏金轮起疾雷.更漏已深人渐散,闹竿挑得彩灯回. ——明·瞿佑·<烟火戏> 记得每年过春节的那段时间,除了欣 ...

  6. UVA - 10014 - Simple calculations (经典的数学推导题!!)

    UVA - 10014 Simple calculations Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & ...

  7. LDA-线性判别分析(二)Two-classes 情形的数学推导

    本来是要调研 Latent Dirichlet Allocation 的那个 LDA 的, 没想到查到很多关于 Linear Discriminant Analysis 这个 LDA 的资料.初步看了 ...

  8. 『NiFi 学习之路』简介

    『NiFi 学习之路』简介 『NiFi 学习之路』入门 -- 下载.安装与简单使用 『NiFi 学习之路』资源 -- 资料汇总 『NiFi 学习之路』把握 -- 架构及主要组件 『NiFi 学习之路』 ...

  9. 『NiFi 学习之路』自定义 —— 组件的自定义及使用

    一.概述 许多业务仅仅使用官方提供的组件不能够满足性能上的需求,往往要通过高度可定制的组件来完成特定的业务需求. 而 NiFi 提供了自定义组件的这种方式. 二.自定义 Processor 占坑待续 ...

随机推荐

  1. 20165319 Exp1 PC平台逆向破解

    本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段,getShell,会返 ...

  2. java并发编程可见性与线程封闭

    可见性 所谓可见性,指的是当一个线程修改了对象的状态后,其他线程能够看到该对象发生的变化.在单线程环境下,向某个变量写入值,然后在后面的操作再读取,在这个过程中该变量的值对该线程来说总是可见.但是,在 ...

  3. HTTP请求头中各字段解释

    Accept : 浏览器(或者其他基于HTTP的客户端程序)可以接收的内容类型(Content-types),例如 Accept: text/plain Accept-Charset:浏览器能识别的字 ...

  4. Linux-day2-pdf课件

    1.Linux文件属性和权限 2.Linux重定向 3.Linux文件查找 4.Linux压缩打包 5.课堂作业 权限相关作业: 题目创建用户carol,ivy,jenny,kevin,alice创建 ...

  5. CICD - Teamcity 配置之二:SSIS Package 自动部署

    首先需要将SSIS Project check in 到 git 中, Teamcity 会到 git 上取到code, build, 然后publish 到指定的服务器上,比如:Dev, QA, S ...

  6. 给树莓派开启samba服务

    参考链接:https://www.cnblogs.com/mnstar/p/8144943.html 安装samba 和 samba-common-bin 启动树莓派以后,在命令行输入: sudo a ...

  7. [数据结构] 希尔排序 C语言程序

    //由小到大 //希尔排序 void shellSort( long int array[], int length) { int i; int j; int k; int gap; //gap是分组 ...

  8. Python操作Excel, 开发和调用接口,发送邮件

    笔记: 上周回顾: 模块: 导入模块的顺序 lyl.py # def hhh(): pass name = 'lyl' a.py import lyl import sys from lyl impo ...

  9. centos查看apache用的是哪个httpd.conf

    httpd -V得到类似如下结果: -D HTTPD_ROOT="/etc/httpd" -D SERVER_CONFIG_FILE="conf/httpd.conf&q ...

  10. Vue.set() this.$set()引发的视图更新思考

    引文 vue文档列表渲染中有条注意事项: 这里提到的两种情况实际改变了数据但是没有触发视图更新. 由此引出Vue.set(),先上文档API: this.$set()和Vue.set()本质方法一样, ...