求一个等比数例之和, 并让他对一个数取模。

用到等比数列求和公式, 快速幂, 逆元。

不会证明, 下面给出代码。

#include <stdio.h>
#include <string.h>
#include <math.h>
typedef  long long ll;
ll multi(ll a,ll b,ll m)  // 二分乘法
{ll ans = 0;a %= m;while(b){if(b & 1){ans = (ans + a) % m;b--;}b >>= 1;a = (a + a) % m;}return ans;
}
ll quick_mod(ll a,ll b,ll mod)
{ll res = 1;while(b){if(b % 2 == 1)res = multi(res, a, mod);// 二分乘法 不然会数据溢出b >>= 1;a = multi(a, a, mod);// 二分乘法 不然会数据溢出}return res;
}
int main()
{ll a, b, mod=9901;scanf("%I64d %I64d",&a, &b);// 首项为 1 , 公比为 a,长度 为 b 的等比数例求和printf("%I64d\n",((quick_mod(a,b,mod*(a-1)) - 1) / (a-1)));return 0;
}

Sumdiv

Time Limit: 1000MS   Memory Limit: 30000K
Total Submissions: 23623   Accepted: 5876

Description

Consider two natural numbers A and B. Let S be the sum of all natural divisors of A^B. Determine S modulo 9901 (the rest of the division of S by 9901).

Input

The only line contains the two natural numbers A and B, (0 <= A,B <= 50000000)separated by blanks.

Output

The only line of the output will contain S modulo 9901.

Sample Input

2 3

Sample Output

15

Hint

2^3 = 8. 
The natural divisors of 8 are: 1,2,4,8. Their sum is 15.

15 modulo 9901 is 15 (that should be output).

思路: 举一个例子: 36, 1。

先把 36 分解成质因数, 2, 2,3, 3。

ans = 1 ,  2,   2*2,   1*(3 +  3*3),   2 * (3 + 3*3)  ,  2*2 *(3 * 3). 之和。

#include <stdio.h>
#include <string.h>
#include <math.h>
typedef long long ll;
int p[10005];
void prime() // 打一个素数表
{p[1] = 2;int cnt = 1;for(int i=3; i<=10000; i+=2){int flag = true;for(int j=2; j*j<=i; j++){if(i%j == 0){flag = false;break;}}if(flag)p[++cnt] = i;}
}
ll multi(ll a,ll b,ll m)  // 二分乘法
{ll ans = 0;a %= m;while(b){if(b & 1){ans = (ans + a) % m;b--;}b >>= 1;a = (a + a) % m;}return ans;
}
ll quick_mod(ll a,ll b,ll mod) // 快速幂
{ll res = 1;while(b){if(b % 2 == 1)res = multi(res, a, mod);b >>= 1;a = multi(a, a, mod);}return res;
}
int main()
{ll a, b, mod=9901;scanf("%I64d %I64d",&a, &b);if(a == 1){printf("1\n");return 0;}prime();ll ans = 1;int num = 0;for(int i=1; p[i]*p[i]<=a; i++){if(a % p[i] == 0) // 寻找每个质因数 和 它的数量 num。{num=0;while(a % p[i] == 0){num++;a /= p[i];}ll m =(p[i] - 1) * mod;ans *= ((quick_mod(p[i], num*b+1, m) + m - 1) / (p[i]-1)); // 等比数列求和// printf("%lld\n",(quick_mod(p[i], num*b+1, m) + m - 1) / (p[i]-1) % mod);ans %= mod;}}ll m = mod * (a - 1);if(a > 1)printf("%I64d\n",ans * ((quick_mod(a, b+1, m) + m - 1) / (a-1)) % mod);elseprintf("%I64d\n",ans % mod);return 0;
}

等比数列求和 (快速幂 + 逆元)相关推荐

  1. 51nod 1013【快速幂+逆元】

    等比式子: Sn=(a1-an*q)/(1-q) n很大,搞一发快速幂,除法不适用于取膜,逆元一下(利用费马小定理) 假如p是质数,且gcd(a,p)=1,那么 a^(p-1)≡1(mod p).刚好 ...

  2. 【BZOJ2751】【codevs1853】容易题,快速幂+逆元

    Time:2016.06.24 Author:xiaoyimi 转载注明出处谢谢 传送门1 传送门2 思路: k=0时答案就是 ∏mi=1∑nj=1j\prod^m_{i=1}\sum^n_{j=1} ...

  3. CodeForces Round #191 (327C) - Magic Five 等比数列求和的快速幂取模

    很久以前做过此类问题..就因为太久了..这题想了很久想不出..卡在推出等比的求和公式,有除法运算,无法快速幂取模... 看到了 http://blog.csdn.net/yangshuolll/art ...

  4. 序列上问题(逆元+整数快速幂)

    题目链接:https://ac.nowcoder.com/acm/contest/393/D 链接:https://ac.nowcoder.com/acm/contest/393/D 来源:牛客网 题 ...

  5. 51Nod 1013 3的幂的和 快速幂 | 乘法逆元 | 递归求和公式

    1.乘法逆元 直接使用等比数列求和公式,注意使用乘法逆元 ---严谨,失细节毁所有 #include "bits/stdc++.h" using namespace std; #d ...

  6. 2019河北省大学生程序设计竞赛(重现赛)B 题 -Icebound and Sequence ( 等比数列求和的快速幂取模)...

    题目链接:https://ac.nowcoder.com/acm/contest/903/B 题意: 给你 q,n,p,求 q1+q2+...+qn 的和 模 p. 思路:一开始不会做,后面查了下发现 ...

  7. 数论(二)快速幂 (矩阵快速幂)等比数列求和 最大公因数和最小公倍数

    快速幂 1.快速幂用于快速计算a的b次方,时间复杂度是O(log2b) 2.用于a和b比较大小的情况,常用的快速幂是带模快速幂 3.分析一个例子: 3 15=?  15=(1111)2 3e1 * ...

  8. 题35.C++练习-3-3快速幂 等比数列求和

    文章目录 题35.C++练习-3-3快速幂 等比数列求和 一.题目 二.题解 题35.C++练习-3-3快速幂 等比数列求和 一.题目 二.题解 本题若使用等比数列求和公式+快速幂当然会因为幂结果数据 ...

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

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

最新文章

  1. 《概率机器人》速度运动模型gmapping中代码解析
  2. 【Python】zip函数
  3. 实现 Java 多线程并发控制框架
  4. 苏教版四下用计算机计算,苏教版四年级下册数学单元测试-4.用计算器计算 (含答案)...
  5. Centos7搭建Jira服务器
  6. Acwing第 37 场周赛【完结】
  7. 单身萌妹纸手把手教你用产品思维追女生
  8. 详解PCB抄板过程,太牛了!
  9. 疫情之下,使用FRP实现内网穿透,远程连接公司电脑进行办公
  10. 分布式全局唯一ID的实现
  11. C++0x,崭新的C++,还是另一个JAVA?
  12. git_day01_01——概要
  13. 弱引用WeakReference
  14. Ubuntu下编译运行C#——mono tools
  15. ElementUI:tree给节点添加icon图标
  16. NumPy库---Axis理解
  17. stm32中如何避免等待_地坪漆施工中如何避免常见的小问题
  18. Ubuntu安装桌面环境以及远程桌面连接
  19. java间接调用_无法解析类型 java.util.Map$Entry。从必需的 .class 文件间接引用了它...
  20. java ts视频文件转mp4格式在线求助

热门文章

  1. PCB拼板和工艺边教程
  2. 椭圆 —— 从理论推导到最小二乘法拟合
  3. 《图说VR入门》——DK2入门及其资源汇总
  4. 西门子S7-1200 PLC选型前这些要了解
  5. 网页设计的目的是什么
  6. InnoDB数据库隔离级别
  7. 关于计算机基础知识的话题,计算机基础教案(完整版).doc
  8. Unity基础知识学习七,帧同步源码学习
  9. django的优缺点
  10. int和String类型的转换