次方求模(快速幂算法) nyoj 102
来源:互联网 发布:远景能源怎么样 知乎 编辑:程序博客网 时间:2024/06/02 01:58
算法分析:
大数问题,需要利用快速幂取模算法。
所谓的快速幂,实际上是快速幂取模的缩写,简单的说,就是快速的求一个幂式的模(余)。在程序设计过程中,经常要去求一些大数对于某个数的余数,为了得到更快、计算范围更大的算法,产生了快速幂取模算法。求a^b mod c = 几。 (result就是取余后的结果)
首先我们需要知道一点:首先要了解这样一个公式:a^b mod c=(a mod c)^b mod c(详细证明请看数论或者离散数学)
了解了这个公式,我们可以先让a关于c取余,这样可以大大减少a的大小, 于是不用思考的进行了改进,代码如下:
主要思想是:
利用二进制将运算二分,大大减少了运算量,同时利用公式 a^b mod c=(a mod c)^b mod c,先将a对c取余是数据缩小从而使运算量减小
例如3^18 18的二进制为10010 算法模拟二进制的转换(辗转相处法) r=3^2*3^16
int Pow(int a, int b, int c) { int r = 1; a = a % c; while(b>0) { if(b % 2 = = 1) r = (r * a) % c; b = b/2; a = (a * a) % c; } return r;}
nyoj 题目地址http://acm.nyist.net/JudgeOnline/problem.php?pid=102
Code:
#include<stdio.h>#include<stdlib.h>long long pow(long long a,long long b,long long c);int main(void){ long long a,b,c; int n; scanf("%d",&n); while(n--){ scanf("%lld%lld%lld",&a,&b,&c); printf("%lld\n",pow(a,b,c)); } return 0;}long long pow(long long a,long long b,long long c){ int r=1; a=a%c; while(b>0){ if(b%2==1) r=(r*a)%c; b=b/2; a=(a*a)%c; } return r;}
参考博客:http://www.2cto.com/kf/201408/322144.html
这个博客讲的十分详细
0 0
- 次方求模(快速幂算法) nyoj 102
- 次方求模(nyoj 102)(快速幂)
- nyoj 102 次方求模 快速求幂
- NYOJ 102 次方求模(快速求幂)
- nyoj 102 次方求摸 快速幂
- NYOJ 102次方求模(快速幂)
- nyoj 次方求模 102 (快速幂)
- nyoj--102--次方求模(快速幂)
- NYOJ 题目102 次方求模(快速幂取余)
- NYOJ-102:次方求模
- nyoj-102-次方求模
- NYOJ-102-次方求模
- NYOJ 102 次方求模
- NYOJ 102 次方求模
- nyoj 102 次方求模
- Nyoj 102 次方求模
- NYOJ 102 次方求模
- NYOJ 102 次方求模
- [iOS]列表视频播放
- Excel的数据类型转换方法
- js获取某个div下的input
- servlet的生命周期。
- Zhejiang university----To Fill or Not to Fill
- 次方求模(快速幂算法) nyoj 102
- Xamarin 判断颜色值得相近程度
- WebServices:WSDL的结构分析
- dijkstra算法
- HDU 5322 NTT与分治
- Git 的 .gitignore 配置
- Java - Elasticsearch查询类型
- 个人常用的css属性
- codeforces 658C Bear and Forgotten Tree 3构造-多么痛的领悟