A^B mod C(快速幂模板)
来源:互联网 发布:淘宝快递软件 编辑:程序博客网 时间:2024/05/17 23:57
讲解链接:http://blog.csdn.net/zhq0808/article/details/62245545
很详细的文章。
<板子>
题目描述:
数论课上,老师给 DreamFox 安排了一项任务,用编程实现 A 的 B 次方模 C 。这个当然难不了 ACMer 。于是 DreamFox 回去后就开始用代码实现了。
输入格式:
三个整数:a,b,c(0≤a,c<231,0≤b<263)。
输出格式:
一个整数,即 ab mod c 的结果。
样例数据 1:
输入
5 100000000000000 12830603
输出:
5418958
代码:
#include<bits/stdc++.h>using namespace std;long long a,b,c;inline void ksm(){ long long ans=1; a=a%c; while(b>0) { if(b&1) ans=(ans*a)%c; b=b>>1; a=(a*a)%c; } cout<<ans<<endl;}int main(){ cin>>a>>b>>c; ksm(); return 0;}
<加强版>
题目描述:
2015年1月1日,国际卫生组织公布了一种新型病毒CAI,其复制能力极强,会使人的记忆能力严重衰退。
在每 1 秒内,一个病毒会分身出 N 个病毒(本体不计),它们和本体拥有着同样的能力,如果 N=4,在第一秒初有 1 个病毒本体,第一秒末分裂出 4 个,那么第一秒末有 5 个,它们在第二秒末会再分裂 5*4 =20个,那么加上最开始的,第二秒末就有 25 个。
为了抑制这种可怕的病毒,清华大学的医学研究人员经过认真研究这种病毒的基因,发明了一种新型青霉素注射液,能有效的消灭这种病毒。人体只需要注射一次这种青霉素,就可以终身免疫。这种青霉素杀毒的前提是:当病毒的数量必须达到或者超过 P 个(对人体开始有害),药力才会自动发挥作用——瞬间全部消灭 P 个病毒。那么,在第 M 秒末,环境中还有多少病毒呢?(注,第一秒初开始就注射了青霉素)
输入格式:
输入数据只有一行,为 3 个整数 N、M 和 P,其含义如题目描述(初始时,只有一只病毒)。
输出格式:
输出数据只有一行,为第 M 秒最后剩余的病毒数目。
样例数据 1
输入
4 3 3
输出
2
样例数据 2
输入
10000 1000 1
输出
0
备注:
【样例1说明】
第一秒的病毒分裂出 4 个,加上本体就是 5 个,消灭三个还剩两个。
第二秒的病毒分裂出 2*4=8 个,加上两个本体就是 10 个,药力发挥 3 次,消灭了 9 个,还剩一个。
第三秒剩下的那个分裂出 4 个,加上本体就是 5 个,药力发挥一次消灭三个,还剩两个。
【样列2说明】
只要有 1 个病毒,药力就发挥杀毒功能,显然没有病毒能活下来。
【数据范围】
对于 1/3 的数据:M≤100000;
对于 2/3 数据:1≤N,P≤2^30,1≤M≤1152921504606846976;
对于 3/3 数据:1≤N≤2^30,1≤P≤2^60,1≤M≤1152921504606846976
代码:
#include<bits/stdc++.h>using namespace std;inline long long ksc(long long a,long long b,long long c){ long long tot=0; while(b) { if(b&1) tot=(tot+a)%c; b=b>>1; a=a*2%c; } return tot;}inline long long work(long long a,long long b,long long c){ long long ans=1; while(b) { if(b&1) ans=ksc(ans,a,c); b=b>>1; a=ksc(a,a,c); } return ans;}int main(){ long long a,b,c; cin>>a>>b>>c; cout<<work(a+1,b,c)<<endl; return 0;}
<推荐练习题目链接>
HDU5187—>zhx’s contest
http://acm.split.hdu.edu.cn/showproblem.php?pid=5187
- A^B mod C(快速幂模板)
- 51nod 1046 A^B Mod C【快速幂模板】
- 快速幂,a^b mod c
- A^B Mod C(快速幂算法)
- 快速幂算法 取余运算 a^b mod c
- FZU 1752 A^B mod C (快速幂)
- 数论——快速幂算法 a^b mod c
- 51nod 1046 A^B Mod C (快速幂)
- 51Nod 1046 A^B Mod C(快速幂)
- FZU Problem 1752 A^B mod C 快速幂乘
- 51nod 1046 A^B Mod C(快速幂)
- 【51nod】1046 A^B Mod C - 快速幂
- FZU 1759 Super A^B mod C (超级快速幂)
- 51Nod-1046 A^B Mod C【快速模幂】
- A^B mod C
- A^B mod C
- A^B mod C
- fzu 1752 A^B mod C(快速乘+快速幂取模)
- 27.leetCode637:Average of Levels in Binary Tree
- setInterval setTimeout(定时器)
- 小白到大牛的成长之路---刚步入工作的小白
- PAT乙级题1009.说反话
- 创建学生成绩单链表
- A^B mod C(快速幂模板)
- Python知识点1
- Objective-C字符串NSString
- 看可口可乐公司是怎么玩转TensorFlow的?
- 51单片机计时器中断
- 简单的游戏
- .Net 题(1)
- MD5加密与DES加密解密
- ImageLoader 图片请求框架的使用