题意

传送门 POJ 1845

题解

分解质因数 A=p1e1p2e2…pnenA=p_1^{e_1}p_2^{e_2}\dots p_n^{e_n}A=p1e1​​p2e2​​…pnen​​,则约数和为
(1+p1+⋯+p1e1)(1+p2+⋯+p2e2)…(1+pn+⋯+pnen)(1+p_1+\dots +p_1^{e_1})(1+p_2+\dots +p_2^{e_2})\dots (1+p_n+\dots +p_n^{e_n})(1+p1​+⋯+p1e1​​)(1+p2​+⋯+p2e2​​)…(1+pn​+⋯+pnen​​)

逆元

对于质因数 pip_ipi​,根据等比数列求和公式,括号内求和为 pieiB+1−1pi−1\frac{p_i^{e_iB+1}-1}{p_i-1}pi​−1piei​B+1​−1​ 分子项快速幂求解,分母项逆元求解。对于 pimodm=1p_i\ mod\ m =1pi​ mod m=1 的情况需要特殊处理,因为此时 pi−1p_i-1pi​−1 不存在逆元。对于正整数 NNN,至多有一个大于等于 N\sqrt NN​ 的质因子,那么逆元打表处理 [1,N][1,\sqrt N][1,N​] 的部分,对于超出这个范围的部分,利用费马小定理进行快速幂求逆元。

#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <map>
using namespace std;
#define mod 9901
typedef map<int, int> mp;
int A, B, inv[mod];mp prime_factor(int n)
{mp res;for (int i = 2; i * i <= n; ++i){while (n % i == 0){++res[i];n /= i;}}if (n != 1)res[n] = 1;return res;
}int mod_pow(int x, int n)
{int res = 1;x %= mod;while (n){if (n & 1)res = res * x % mod;x = x * x % mod;n >>= 1;}return res;
}int get_inv(int n)
{if (n < mod)return inv[n];return mod_pow(n, mod - 2);
}int main()
{inv[1] = 1;for (int i = 2; i < mod; ++i)inv[i] = (mod - mod / i) * inv[mod % i] % mod;scanf("%d%d", &A, &B);mp fac = prime_factor(A);int res = 1;for (mp::iterator it = fac.begin(); it != fac.end(); ++it){int p = it->first, e = it->second * B;if (p % mod != 1)res = res * (mod_pow(p, e + 1) + mod - 1) % mod * get_inv(p - 1) % mod;elseres = res * (e % mod + 1) % mod;}printf("%d\n", res);return 0;
}
分治

考虑质因数 pip_ipi​,若 eie_iei​ 为奇数,设其括号内求和为 sum(p,e)sum(p,e)sum(p,e),则有
sum(p,e)=(1+p+⋯+p⌊e/2⌋)+(p⌊e/2⌋+1+⋯+pe)=(1+p⌊e/2⌋+1)×sum(p,⌊e/2⌋)sum(p,e)=(1+p+\dots+p^{\lfloor e/2\rfloor})+(p^{\lfloor e/2\rfloor+1}+\dots +p^e)=(1+p^{\lfloor e/2\rfloor+1})\times sum(p,\lfloor e/2\rfloor)sum(p,e)=(1+p+⋯+p⌊e/2⌋)+(p⌊e/2⌋+1+⋯+pe)=(1+p⌊e/2⌋+1)×sum(p,⌊e/2⌋) 指数为偶数,将 pieip_i^{e_i}piei​​ 加入答案后将 eie_iei​ 减一处理为奇数情况即可。

#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <map>
using namespace std;
#define mod 9901
typedef map<int, int> mp;
int A, B;mp prime_factor(int n)
{mp res;for (int i = 2; i * i <= n; ++i){while (n % i == 0){++res[i];n /= i;}}if (n != 1)res[n] = 1;return res;
}int mod_pow(int x, int n)
{int res = 1;x %= mod;while (n){if (n & 1)res = res * x % mod;x = x * x % mod;n >>= 1;}return res;
}int sum(int p, int e)
{if (!e)return 1;int res = 0;if (!(e & 1))res += mod_pow(p, e), --e;e /= 2, res += (1 + mod_pow(p, e + 1)) * sum(p, e);return res % mod;
}int main()
{scanf("%d%d", &A, &B);mp fac = prime_factor(A);int res = 1;for (mp::iterator it = fac.begin(); it != fac.end(); ++it){int p = it->first, e = it->second * B;res = res * sum(p, e) % mod;}printf("%d\n", res);return 0;
}

POJ 1845 逆元 / 分治相关推荐

  1. Linux等比数列脚本求和,POJ 1845 (约数和+二分等比数列求和)

    题目大意:A^B的所有约数和,mod 9901. 解题思路: ①整数唯一分解定理: 一个整数A一定能被分成:A=(P1^K1)*(P2^K2)*(P3^K3).....*(Pn^Kn)的形式.其中Pn ...

  2. Sumdiv POJ - 1845

    Sumdiv POJ - 1845 题意: 求ABA^BAB的所有约数之和mod 9901(1<=A,B<=5e7) 题解: 我们先将A分解质因子,表示为:p1c1∗p2c2∗...... ...

  3. 【简●解】POJ 1845 【Sumdiv】

    POJ 1845 [Sumdiv] [题目大意] 给定\(A\)和\(B\),求\(A^B\)的所有约数之和,对\(9901\)取模. (对于全部数据,\(0<= A <= B <= ...

  4. 【POJ 1845】 Sumdiv (整数唯分+约数和公式+二分等比数列前n项和+同余)

    [POJ 1845] Sumdiv 用的东西挺全 最主要通过这个题学了约数和公式跟二分求等比数列前n项和 另一种小优化的整数拆分  整数的唯一分解定理: 随意正整数都有且仅仅有一种方式写出其素因子的乘 ...

  5. POJ 1845 【数论】

    题目链接:POJ 1845 题意 求ababa^b的所有约数之和,最终结果对9901求模 需要知识 1.快速幂:二分法求nmnmn^m的结果 2.因数分解:遍历求出所有因数 3.约数和定理:假设n=p ...

  6. POJ 1845 Sumdiv 【逆元】

    题意:求A^B的所有因子之和 很容易知道,先把分解得到,那么得到,那么 的所有因子和的表达式如下 第一种做法是分治求等比数列的和  用递归二分求等比数列1+pi+pi^2+pi^3+...+pi^n: ...

  7. poj 1845 Sumdiv (算数基本定理+逆元)

    输入a和b,求a^b的所有因子之和. #include <iostream> #define ll long longusing namespace std;const int mod=9 ...

  8. POJ 1741 树分治

    题目链接[http://poj.org/problem?id=1741] 题意: 给出一颗树,然后寻找点对(u,v)&&dis[u][v] < k的对数. 题解: 这是一个很经典 ...

  9. 礼物(中国剩余定理+拓展gcd求逆元+分治=拓展Lucus)

    礼物 题意: 求\[C(n,m)\ \%\ p\] \(n,m,p\le 10^9\),且若\(p=\prod_{i=1}^{k}{p_i}^{c_i}\),则\(\forall i\in [1..k ...

最新文章

  1. Java:封装的概念,UML类图,构造方法,this关键字,static关键字,方法重载,包package
  2. 二:unittest框架配合selenium之xpath定位
  3. cucumber测试_如何在Cucumber中进行后端测试
  4. 马斯克称面临巨大通胀压力 暗示特斯拉可能涨价
  5. ThreadLocal到底是什么,尚硅谷docker高级
  6. 数据库系统概论第五版(第 5 章 数据库完整性)笔记
  7. 计算机基础知识100题 含答案,计算机基础知识练习试题及答案
  8. Ubuntu20.04下搜狗输入法安装配置(超精简)
  9. 交换机接出来的网线可以再接上无线路由器实现无线上网吗
  10. 在线社交网络的影响力最大化算法
  11. 实时展示摄像头内容(go server + electron-vue client)
  12. echartsx轴数据过多,倾斜45度
  13. Android 按电源键亮屏/息屏流程分析
  14. mac macbook应用清单
  15. 送您一份《学编程笔记本电脑选购指南》,建议收藏!
  16. Element UI 应用精讲
  17. win10 使用多桌面的两种方式
  18. 开源机器人【01】 - 积木编程软件OpenBlock(类似scratch)
  19. RestTemplate设置通用header 并获取header请求参数
  20. μthenticode:一款用于验证 Windows 文件签名的跨平台工具

热门文章

  1. 视频剪辑教程,视频加图片,图片加视频,教你制作画中画特效
  2. 网络爬虫---抓包分析,用抓包分析爬取腾讯视频某视频所有评论(Fiddler工具包的分享)
  3. 隐藏在sketch的10个实用技巧,学会就是赚到!
  4. Unity 技术问答群 593904178
  5. HTML5新增的结构元素和网页元素
  6. linux环境下编译部署php生产环境
  7. EXT JS 4.3 在线学习
  8. 电改背景下,售电公司如何利用需求侧响应模式
  9. 从0到一开发微信小程序(5)—小程序WXML
  10. Android Binder(也许是最容易理解的)