题目地址:

https://www.acwing.com/problem/content/99/

假设现在有两个自然数 a a a和 a a a, s s s是 a b a^b ab的所有约数之和。请你求出 s m o d 9901 s\mod9901 smod9901的值是多少。

输入格式:
在一行中输入用空格隔开的两个整数 a a a和 b b b。

输出格式:
输出一个整数,代表 s m o d 9901 s\mod9901 smod9901的值。

数据范围:
0 ≤ a , b ≤ 5 × 1 0 7 , a + b > 0 0≤a,b≤5×10^7, a+b>0 0≤a,b≤5×107,a+b>0

约数之和有公式,参考https://blog.csdn.net/qq_46105170/article/details/113815655。对于一个正整数 x x x,若其质因子分解是 x = p 1 α 1 p 2 α 2 . . . p k α k x=p_1^{\alpha_1}p_2^{\alpha_2}...p_k^{\alpha_k} x=p1α1​​p2α2​​...pkαk​​,那么 x x x的约数个数是 ( 1 + p 1 + p 1 2 + . . . + p 1 α 1 ) ( 1 + p 2 + p 2 2 + . . . + p 2 α 2 ) . . . ( 1 + p k + p k 2 + . . . + p k α k ) (1+p_1+p_1^2+...+p_1^{\alpha_1})(1+p_2+p_2^2+...+p_2^{\alpha_2})...(1+p_k+p_k^2+...+p_k^{\alpha_k}) (1+p1​+p12​+...+p1α1​​)(1+p2​+p22​+...+p2α2​​)...(1+pk​+pk2​+...+pkαk​​)。那么若 a = p 1 α 1 . . . p k α k a=p_1^{\alpha_1}...p_k^{\alpha_k} a=p1α1​​...pkαk​​,那么 a b a^b ab的约数个数是 ( 1 + p 1 + . . . + p 1 b α 1 ) ( 1 + p 2 + . . . + p 2 b α 2 ) . . . ( 1 + p k + . . . + p k b α k ) (1+p_1+...+p_1^{b\alpha_1})(1+p_2+...+p_2^{b\alpha_2})...(1+p_k+...+p_k^{b\alpha_k}) (1+p1​+...+p1bα1​​)(1+p2​+...+p2bα2​​)...(1+pk​+...+pkbαk​​)。所以可以先对 a a a进行质因子分解,然后问题变为怎么计算 1 + p + . . . + p k − 1 1+p+...+p^{k-1} 1+p+...+pk−1。设 f ( k ) = 1 + p + . . . + p k − 1 f(k)=1+p+...+p^{k-1} f(k)=1+p+...+pk−1,如果 k k k是偶数,则 f ( k ) = ( 1 + p + . . . + p k 2 − 1 ) + ( p k 2 + p k 2 + 1 + . . . + p k − 1 ) = ( 1 + p k 2 ) ( 1 + p + . . . + p k 2 − 1 ) = ( 1 + p k 2 ) f ( k 2 ) f(k)=(1+p+...+p^{\frac{k}{2}-1})+(p^{\frac{k}{2}}+p^{\frac{k}{2}+1}+...+p^{k-1})\\=(1+p^{\frac{k}{2}})(1+p+...+p^{\frac{k}{2}-1})=(1+p^{\frac{k}{2}})f(\frac{k}{2}) f(k)=(1+p+...+p2k​−1)+(p2k​+p2k​+1+...+pk−1)=(1+p2k​)(1+p+...+p2k​−1)=(1+p2k​)f(2k​)又有 f ( 1 ) = 1 f(1)=1 f(1)=1,所以问题转化为怎么求 p k 2 m o d 9901 p^{\frac{k}{2}}\mod 9901 p2k​mod9901( 9901 9901 9901是素数),这可以用快速幂来求,参考https://blog.csdn.net/qq_46105170/article/details/113823747。如果 k k k是奇数,那么 k − 1 k-1 k−1是偶数,有 f ( k ) = 1 + p ( 1 + p + . . . + p k − 2 ) = 1 + p f ( k − 1 ) f(k)=1+p(1+p+...+p^{k-2})=1+pf(k-1) f(k)=1+p(1+p+...+pk−2)=1+pf(k−1)就转化为已解决的问题了。代码如下:

#include <iostream>
#include <cstring>
using namespace std;const int MOD = 9901;// 快速幂
int qmi(int a, int k) {a %= MOD;int res = 1;while (k) {if (k & 1) res = res * a % MOD;a = a * a % MOD;k >>= 1;}return res;
}int sum(int p, int k) {if (k == 1) return 1;if (k % 2 == 0) return (1 + qmi(p, k >> 1)) * sum(p, k >> 1) % MOD;return (sum(p, k - 1) + qmi(p, k - 1)) % MOD;
}int main() {int a, b;scanf("%d%d", &a, &b);int res = 1;for (int i = 2; i <= a / i; i++)if (a % i == 0) {int cnt = 0;while (a % i == 0) {cnt++;a /= i;}res = res * sum(i, b * cnt + 1) % MOD;}if (a > 1) res = res * sum(a, b + 1) % MOD;if (a == 0) res = 0;printf("%d\n", res);return 0;
}

时间复杂度 O ( a + log ⁡ 2 b ) O(\sqrt{a}+\log^2 b) O(a ​+log2b),空间 O ( log ⁡ b ) O(\log b) O(logb)。

【ACWing】97. 约数之和相关推荐

  1. 《算法竞赛进阶指南》打卡-基本算法-AcWing 97. 约数之和:递归、快速幂

    文章目录 题目解答 题目来源 题目解答 来源:acwing 分析: 快速幂参考笔者的这篇博文: 算法刷题-数论-组合数.快速幂.逆元.递推求组合数.逆元求组合数 约数之和参考笔者的这篇博文: 算法刷题 ...

  2. lightoj 1098 A New Function 约数之和(一道奇怪的数论) 整除分块优化

    文章目录 题目如下: 思考人生: 题目如下: lightoj 1098 A New Function 求1-n所有数的所有约数之和(不包括1和它本身).n<=2e9. 思考人生: 首先考虑打表找 ...

  3. 数论 - 约数基础 【 试除法求所有约数 + 约数个数和约数之和 + 欧几里得算法-求解最大公约数 】

    数论-约数基础 1.约数定义 约数,又称因数.整数a除以整数b(b≠0) 除得的商正好是整数而没有余数,我们就说a能被b整除,或b能整除a.a称为b的倍数,b称为a的约数.在大学之前,"约数 ...

  4. 算法刷题-数论-试除法求约数、约数个数、约数之和、最大公约数(辗转相除法)

    文章目录 acwing869. 试除法求约数 acwing870. 约数个数 acwing871. 约数之和 acwing872. 最大公约数 acwing869. 试除法求约数 acwing869. ...

  5. 51NOD 1220 约数之和(杜教筛)

    1220 约数之和 推式子 ∑i=1n∑j=1nd(i,j)=∑i=1n∑j=1n∑x∣i∑y∣j(gcd(x,y)=1)xjy=∑d=1ndμ(d)∑i=1nd∑x∣iix∑j=1nd∑y∣jj=∑ ...

  6. ~~约数之和(附模板题)

    模板 如果 N = p1^c1 * p2^c2 * ... *pk^ck 约数个数: (c1 + 1) * (c2 + 1) * ... * (ck + 1) 约数之和: (p1^0 + p1^1 + ...

  7. 第F题 真约束之和(通解)古希腊数学家毕达哥拉斯在自然数研究中发现,220的所有真约数(即不是自身的约数)之和为:  1+2+4+5+10+11+20+22+44+55+110=284

    古希腊数学家毕达哥拉斯在自然数研究中发现,220的所有真约数(即不是自身的约数)之和为: 1+2+4+5+10+11+20+22+44+55+110=284. 而284的所有真约数为1.2.4.71. ...

  8. 约数之和(分治,公式变形)

    题目链接 AcWing 97. 本题有两种方法,公式法与求逆元,这里使用逆元求等比数列的和 注意逆元不存在的情况(代码中有标注) /*1.分治法2.同余逆元对于(a/b)%MOD 逆元不存在:等价于b ...

  9. 约数之和 c语言,(c语法百题20)约数之和,约数之和

    (c语法百题20)约数之和,约数之和 知识点: 求约数的算法 for语句,if语句灵活运用. 内容: 键入一个自然数 ,求这个自然数的所有约数之和 输入说明: 一个整数 输出说明: 一个整数 输入样例 ...

最新文章

  1. java 字符处理_Java字符串处理实用代码
  2. 利用bigpipe机制实现页面模块的异步渲染 chunked技术
  3. Java开发者必须知道的内存泄漏问题
  4. 计算机网络之数据链路层思维导图总结
  5. mysql重装_连我mysql读你文件
  6. SharpDevelop 如何切换设计视图和代码视图
  7. OpenCV-Python实战(番外篇)——OpenCV实现图像卡通化
  8. Windows Mobile Sensors API库的设计
  9. 背景减法——自组织算法
  10. python里countsget_Python Pandas Series.get_dtype_counts()用法及代码示例
  11. NAT篇 双剑合璧,无往不利——双向NAT
  12. 软考系统分析师备考详细介绍
  13. element-ui的分页,添加首页、尾页,跳转按钮
  14. jQuery常用API
  15. 基于 Django 的图书馆借阅系统
  16. 记一次逗逼的codecraft算法大赛的参赛经历
  17. 华为nova6开启开发者模式,连接USB
  18. 游戏服务器的那些事儿
  19. Linux 环境下iSCSI Target 与 Initiator 配置
  20. md5加密以及可逆的加密解密算法

热门文章

  1. linux下获取程序启动时间,c 实现
  2. Kotlin集合—集合类型共性和操作
  3. vue的methods属性
  4. 设计模式之观察者模式(Observer模式)
  5. 如何提高 GitHub 的下载速度
  6. 链闻 · 部落城之王 | 《多链并进 - 谁是新基建之王》精彩回顾
  7. LeetCode0704.二分查找 Go语言AC笔记
  8. PowerUp攻击模块实战
  9. altera cyclone v IOE delay 设置
  10. win10系统要求配置_推荐770以上《NBA 2K21》PC版系统配置要求公布