快速幂求余
2016-01-12 21:37
267 查看
大致思路
积的取余等于取余的积取余每一个单独取余之后的积在取余,与积取余所得的余数不变。
即(3*3) mod 5 =[(3 mod 5) * (3 mod 5)] mod 5
栗子:
a:底数,b:幂次,c:求余的数a^b mod c
3^3 mod 5
代码:
#include<bits/stdc++.h> using namespace std; int mod(long long a,long long b,int c){ int ans=1; int k=a%c; while(b>0) { if (b%2==1) { ans=(k*ans)%c; } b=b/2; k=(k*k)%c; } return ans; } int main(int argc, char const *argv[]) { int t; cin>>t; for (int i = 0; i < t; ++i) { long long n; cin>>n; int q; q=mod(n,n,10); printf("%d\n",q); } return 0; }
1.mod函数中,不管奇数偶数都会经过k=k/2。
2.k=(k*k)%c,即同时处理两个数,假如k是奇数在if判断里面单独处理一次,然后在当作偶数进行幂次处理。此时k=(k*k)%c,相当于与暂时把ans需要的值寄存在k上,k是处理数据的中间值,最后都要汇总到ans上,因为最终1肯定是奇数。
相关文章推荐
- 附2 volatile
- 【原】模式之-适配器Adapter模式
- html之file标签 --- 图片上传前预览 -- FileReader
- hdoj Watch The Movie 3496 (二维01背包)好题
- Android permission 动态申请、授权
- 3、Java常用的运算符
- Linux进程间通信之管道
- 解决离线Could not parse configuration:hibernate.cfg.xml错误
- Android中将AS的项目导入到eclipse中,stye中常常报错
- Spring对RMI的支持
- C Primer Plus(第五版)9
- casperJs的安装
- 【java】 java 设计模式(1):工厂方法模式(Factory Method)
- C# 正则表达式
- 插入usb之后发生了什么
- GDataXML-HTML 解析XML
- Fish的烦恼
- 包
- java中的缓存技术该如何实现
- 华为机试题目