各种快速幂(qaq)
今天分享下各种快速幂(有点坑),首先说一下快速幂的原理,



第一种方法(普通的快速幂)
#include<iostream> //适用范围a,b,p 1e9
#include<cmath>
#include<algorithm>
#include<stack>
#include<map>
using namespace std;
typedef long long ll; ll fastpower(ll a,ll b,ll p) //写一个快速幂的函数
{
ll ans = 1;
while(b) //b的二进制还有位数
{
if(b & 1) //b为奇数 循环
{
ans = ans * a % p;
}
a = a * a % p; // 2^n 增长
b >>= 1; // b右移一位
}
return ans % p; //防止b为0,而没有模 p
} int main()
{
ll a,b,p;
cin>>a>>b>>p;
cout<<fastpower(a,b,p)<<endl;
return 0;
}
第二种方法(第一种的强化版)
#include <stdio.h> //无敌的_int 128 可以无视a,b,p的范围,这范围真的恶心 a,b,p 1e18
typedef __int128 ll;
longlong a_b_Mod_c(ll a, ll b, ll p)
{
ll s = ;
while (b)
{
if (b & )
s = (s * a) % p;
a = (a * a) % p;
b >>= ;
}
return (longlong) s % p;
}
int main()
{
int t;
longlong a, b, p;
scanf("%d", &t);
while (t--)
{
scanf("%lld%lld%lld", &a, &b, &p);
printf("%lld\n", a_b_Mod_c(a, b, p));
}
return;
}
第三种方法(普通快速幂的优化,即也用了快速乘)
#include <iostream>
using namespace std; typedef long long ll; ll q_mul(ll a, ll b, ll mod) //快乘
{
ll ans=0;
while(b)
{
if(b & 1) ans=(ans+a)%mod;
a=(a<<1)%mod;
b>>=1;
}
return ans;
} ll q_pow(ll a, ll b, ll mod) //快幂
{
ll ans=1;
while(b)
{
if(b & 1) ans=q_mul(ans,a,mod);
a=q_mul(a,a,mod);
b>>=1;
}
return ans;
} int main()
{
ll a,b,mod;
int n;
cin>>n;
while(n--)
{
cin>>a>>b>>mod;
cout<<q_pow(a,b,mod)<<endl;
} }
Java代码
import java.math.BigInteger;
import java.util.Scanner; public class Main{ public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for (int i = 0; i < n; i++)
{ BigInteger A = sc.nextBigInteger();
BigInteger B = sc.nextBigInteger();
BigInteger P = sc.nextBigInteger();
System.out.println(A.modPow(B, P));
}
} }
最后的大招-python(变态,一般做大数的都用它,别问我为什么,
一时用python一时爽,一直用python一直爽,貌似是py的整数类的封装问题)
python 1,def fastExpMod(b, e, m):
result = 1
while e != 0:
if (e&1) == 1:
# ei = 1, then mul
result = (result * b) % m
e >>= 1
# b, b^2, b^4, b^8, ... , b^(2^n)
b = (b*b) % m
return result
t=int(input())
while t:
t-=1
a, b, c = map(int, input().split())
print(fastExpMod(a,b,c)) 2,n = int(input())
for i in range(n):
a, b, p = map(int, input().split())
print(pow(a, b, p))
如果有错误的地方恳请大家指出来。
1≤T≤1031≤T≤103,1≤A,B,P≤1018
各种快速幂(qaq)的更多相关文章
- 多项式求ln,求exp,开方,快速幂 学习总结
		
按理说Po姐姐三月份来讲课的时候我就应该学了 但是当时觉得比较难加上自己比较懒,所以就QAQ了 现在不得不重新弄一遍了 首先说多项式求ln 设G(x)=lnF(x) 我们两边求导可以得到G'(x)=F ...
 - HDU 5607 graph 矩阵快速幂 + 快速幂
		
这道题得到了学长的助攻,其实就是一个马尔科夫链,算出一步转移矩阵进行矩阵快速幂就行了,无奈手残 这是我第一回写矩阵快速幂,写的各种毛病,等到调完了已经8点44了,交了一发,返回PE,(发现是少了换行) ...
 - 快速幂:quickpow
		
众所周知,快速幂是优化对数的次方运算的最普遍手段.在学习快速幂的思想时,其分治思想容易让大家用简单的递归实现. 但其实,除了递归之外,更好的方法会是简单的 WHILE循环.下面贴代码: #includ ...
 - 关于矩阵快速幂的用法总结QwQ
		
umm首先矩阵快速幂的板子就不港了比较简单的还是?就结合二进制地理解一下就好了,代码可以翻蒟蒻の考前续命这里面放了我记得? 主要是说下应用趴? 目前我会的似乎就是个矩阵加速?简单来说就是个给一个递推式 ...
 - 洛谷 P4910 帕秋莉的手环 矩阵乘法+快速幂详解
		
矩阵快速幂解法: 这是一个类似斐波那契数列的矩乘快速幂,所以推荐大家先做一下下列题目:(会了,差不多就是多倍经验题了) 注:如果你不会矩阵乘法,可以了解一下P3390的题解 P1939 [模板]矩阵加 ...
 - 【11.1校内测试】【快速幂DP】【带权并查集】【模拟】
		
Solution $jzy$大佬用了给的原根的信息,加上矩阵快速幂150行QAQ 然而$yuli$大佬的做法不仅好懂,代码只有50行! 快速幂的思想,把m看成要组成的区间总长度,每次将两段组合得到新的 ...
 - 【矩阵快速幂】【杭电OJ1757】
		
http://acm.hdu.edu.cn/showproblem.php?pid=1757 A Simple Math Problem Time Limit: 3000/1000 MS (Java/ ...
 - CSUOJ 1162 Balls in the Boxes 快速幂
		
Description Mr. Mindless has many balls and many boxes,he wants to put all the balls into some of th ...
 - 51nod 1197 字符串的数量 V2(矩阵快速幂+数论?)
		
接上一篇,那个递推式显然可以用矩阵快速幂优化...自己随便YY了下就出来了,学了一下怎么用LaTeX画公式,LaTeX真是个好东西!嘿嘿嘿 如上图.(刚画错了一发...已更新 然后就可以过V2了 or ...
 
随机推荐
- Android开发如何定制framework层服务
			
刚刚跨完年,新年第一篇文章,那么今天将对Android开发framework中间层的服务定制使用作个总结.首先我们先导入Android平台源码framework层的代码到开发工具eclipse中,代码 ...
 - 购物车redis存储结构
 - spring boot(7)-mybatis全注解化
			
关于配置数据库可以参考上一篇文章,这里只讲mybatis pom.xml <!-- 引入mybatis --> <dependency> <groupId>org. ...
 - pmp证书
 - MVC框架以及实例
			
MVC框架 MVC(model,view,controller),一种将业务逻辑.数据.界面分离的方法组织代码的框架.在改进界面及用户交互的同时,不需要重写业务逻辑.MVC将传统的输入.处理和输出分离 ...
 - Python logger模块
			
1 logging模块简介 logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级.日志保存路径.日志文件回滚等:相比print,具备如下优点: 可以通过设置不同 ...
 - Azure 登录设置
			
转自 http://blog.csdn.net/azure_nonofficial/article/details/38095459 这是我们Azure非官方的第一篇博文,欢迎大家各种拍砖. 微软云计 ...
 - Voronoi图及matlab实现
			
[题外话:想一想真是...美赛时我预测求爱尔兰的充电站位置分布,画Voronoi图,程序跑了一个小时...] Voronoi图,又叫泰森多边形或Dirichlet图,它是由一组由连接两邻点直线的垂 ...
 - BZOJ 1588 营业额统计 set
			
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1588 题目大意: 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交 ...
 - java list.remove移除失败
			
1. resultList.remove(i) 移除失败说明 当i为Integer类型时,通过观察源码发现当找不到该类型时就会自动去找Object类型,即remove(object),因为集合中不存在 ...