等比数列求和 (快速幂 + 逆元)
求一个等比数例之和, 并让他对一个数取模。
用到等比数列求和公式, 快速幂, 逆元。
不会证明, 下面给出代码。
#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;
}
等比数列求和 (快速幂 + 逆元)相关推荐
- 51nod 1013【快速幂+逆元】
等比式子: Sn=(a1-an*q)/(1-q) n很大,搞一发快速幂,除法不适用于取膜,逆元一下(利用费马小定理) 假如p是质数,且gcd(a,p)=1,那么 a^(p-1)≡1(mod p).刚好 ...
- 【BZOJ2751】【codevs1853】容易题,快速幂+逆元
Time:2016.06.24 Author:xiaoyimi 转载注明出处谢谢 传送门1 传送门2 思路: k=0时答案就是 ∏mi=1∑nj=1j\prod^m_{i=1}\sum^n_{j=1} ...
- CodeForces Round #191 (327C) - Magic Five 等比数列求和的快速幂取模
很久以前做过此类问题..就因为太久了..这题想了很久想不出..卡在推出等比的求和公式,有除法运算,无法快速幂取模... 看到了 http://blog.csdn.net/yangshuolll/art ...
- 序列上问题(逆元+整数快速幂)
题目链接:https://ac.nowcoder.com/acm/contest/393/D 链接:https://ac.nowcoder.com/acm/contest/393/D 来源:牛客网 题 ...
- 51Nod 1013 3的幂的和 快速幂 | 乘法逆元 | 递归求和公式
1.乘法逆元 直接使用等比数列求和公式,注意使用乘法逆元 ---严谨,失细节毁所有 #include "bits/stdc++.h" using namespace std; #d ...
- 2019河北省大学生程序设计竞赛(重现赛)B 题 -Icebound and Sequence ( 等比数列求和的快速幂取模)...
题目链接:https://ac.nowcoder.com/acm/contest/903/B 题意: 给你 q,n,p,求 q1+q2+...+qn 的和 模 p. 思路:一开始不会做,后面查了下发现 ...
- 数论(二)快速幂 (矩阵快速幂)等比数列求和 最大公因数和最小公倍数
快速幂 1.快速幂用于快速计算a的b次方,时间复杂度是O(log2b) 2.用于a和b比较大小的情况,常用的快速幂是带模快速幂 3.分析一个例子: 3 15=? 15=(1111)2 3e1 * ...
- 题35.C++练习-3-3快速幂 等比数列求和
文章目录 题35.C++练习-3-3快速幂 等比数列求和 一.题目 二.题解 题35.C++练习-3-3快速幂 等比数列求和 一.题目 二.题解 本题若使用等比数列求和公式+快速幂当然会因为幂结果数据 ...
- c语言的幂乘积表达式,POJ 1845 Sumdiv [素数分解 快速幂取模 二分求和等比数列]
大致题意: 求A^B的所有约数(即因子)之和,并对其取模 9901再输出. 解题基础: 1) 整数的唯一分解定理: 任意正整数都有且只有一种方式写出其素因子的乘积表达式. ,其中 为素数 2) 约数和 ...
最新文章
- 《概率机器人》速度运动模型gmapping中代码解析
- 【Python】zip函数
- 实现 Java 多线程并发控制框架
- 苏教版四下用计算机计算,苏教版四年级下册数学单元测试-4.用计算器计算 (含答案)...
- Centos7搭建Jira服务器
- Acwing第 37 场周赛【完结】
- 单身萌妹纸手把手教你用产品思维追女生
- 详解PCB抄板过程,太牛了!
- 疫情之下,使用FRP实现内网穿透,远程连接公司电脑进行办公
- 分布式全局唯一ID的实现
- C++0x,崭新的C++,还是另一个JAVA?
- git_day01_01——概要
- 弱引用WeakReference
- Ubuntu下编译运行C#——mono tools
- ElementUI:tree给节点添加icon图标
- NumPy库---Axis理解
- stm32中如何避免等待_地坪漆施工中如何避免常见的小问题
- Ubuntu安装桌面环境以及远程桌面连接
- java间接调用_无法解析类型 java.util.Map$Entry。从必需的 .class 文件间接引用了它...
- java ts视频文件转mp4格式在线求助