详见代码:

#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>
#define MOD 9901
// 9901是一个素数
using namespace std;int A, B; // 计算A^B的所有因子的和
int num[50], ex[50], idx; // 记录所有的因子和指数void deal(int x) {idx = -1;for (int i = 2; i <= (int)sqrt(double (x)); ++i) {if (x % i == 0) {++idx;num[idx] = i;ex[idx] = 0;while (x % i == 0) {++ex[idx];x /= i;}}}if (x != 1) {++idx;num[idx] = x;ex[idx] = 1;} // 分解完成
}/*
A * x = 1 mod B;
A * x - B * y = 1;
要求1必须是gcd(A, B)的倍数,由于9901是一个素数,因此只有当A==9901是不符合要求的
*/int exgcd(int a, int b,int &x, int &y) { if (b == 0) {x = 1, y = 0;return a;}int ret = exgcd(b, a % b, x, y);int t = x;x = y;y = t - a/b*y;return ret;
}int getinv(int v) {v %= MOD;int a = v, b = MOD, x, y;exgcd(a, b, x, y);x = (x % MOD + MOD) % MOD;return x;
}int _pow(int a, int b) {int ret = 1;a %= MOD;while (b) {if (b & 1) {ret *= a;ret %= MOD;}b >>= 1;a *= a;a %= MOD;}return ret;
}
// 1073741824
// 等比公式是 (num[i]^exp[i])^B = num[i]^exp[i]*B
// 其因子和为num[i]^0 + num[i]^1 + ...num[i]^exp[i]*B
// 化简之后就是 (num[i]^(exp[i]*B+1)-1)/(num[i]-1)int main() {int ret;while (scanf("%d %d", &A, &B) == 2) {ret = 1;deal(A); // 对A进行分解for (int i = 0; i <= idx; ++i) {if (num[i] % MOD == 1) { // 这里要进行一下特殊处理,不然就直接去就0的逆元了 ret *= (ex[i]*B+1)%MOD;ret %= MOD;} else {ret *= ((_pow(num[i]%MOD, ex[i]*B+1)-1+MOD)%MOD*getinv(num[i]-1))%MOD;ret %= MOD;}}printf("%d\n", ret);}return 0;
}

转载于:https://www.cnblogs.com/Lyush/archive/2013/01/04/2844741.html

POJ-1845 Sumdiv 逆元,特殊情况相关推荐

  1. POJ 1845 Sumdiv 【逆元】

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

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

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

  3. c语言的幂乘积表达式,POJ 1845 Sumdiv [素数分解 快速幂取模 二分求和等比数列]

    大致题意: 求A^B的所有约数(即因子)之和,并对其取模 9901再输出. 解题基础: 1) 整数的唯一分解定理: 任意正整数都有且只有一种方式写出其素因子的乘积表达式. ,其中 为素数 2) 约数和 ...

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

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

  5. Sumdiv POJ - 1845

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

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

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

  7. POJ 1845 逆元 / 分治

    题意 传送门 POJ 1845 题解 分解质因数 A=p1e1p2e2-pnenA=p_1^{e_1}p_2^{e_2}\dots p_n^{e_n}A=p1e1​​p2e2​​-pnen​​,则约数 ...

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

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

  9. POJ 1845 【数论】

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

最新文章

  1. [置顶] 当我拿车钥匙的时候,刚交的女朋友跑了。。。
  2. 微服务项目用了几台服务器,微服务部署运维
  3. 炎热的夏天过去了,老司机用Python带你爬爬哪个城市最热
  4. http://www.cnblogs.com/amboyna/archive/2008/03/08/1096024.html
  5. 查看SqlServer的内存使用情况
  6. ReactNative-----环境搭建二(android)
  7. Hive和HBase
  8. 2017年10月08日普及组 蜡烛
  9. 更改API级别的Android Studio
  10. HDU1234 开门人和关门人(解法二)【废除!!!】
  11. 如何查看mysql的sql语句索引_mysql 查看sql语句索引情况 详解explain
  12. Python修改图片分辨率(附代码) | Python工具
  13. JS计算两个数组的交集、差集、并集、补集(多种实现方式)
  14. ‘primordial is not defined‘ node 报错解决方法 终极篇!!
  15. 2017年6月Mac OS 10.11安装文档
  16. this指向,并改变this指向
  17. 绘制半长轴和半短轴分别为a,b的椭圆
  18. 数据库分区概念及简单运用
  19. 数据库概念mongodb使用数据库CLUD操作
  20. 蓝牙打开流程(btu_task_start_up打开 和 BT hci打开)

热门文章

  1. asp.net Repeater取得CheckBox选中的某行某个值的c#写法
  2. 调试Android之system.img的来回切换。
  3. java 微信请求_Java web微信请求拦截器(微信公众号开发)
  4. P1083 借教室(差分+二分)
  5. 李飞飞:新技术变革时代的数据库产业
  6. 实时数仓入门训练营:实时数仓助力互联网实时决策和精准营销
  7. 这是从云栖大会指挥部发回的现场报道
  8. 美术的故事 —— 那些用技术创造艺术的游戏开发者
  9. unity实用技术:色盲玩家也能享受好的游戏体验
  10. 《炉石传说》架构设计赏析(1):游戏启动流程