a*b%p a^b%p(快速幂)
a^b%p和 a*b%p问题(快速幂运算)
a^b%p问题
求 a 的 b 次方对 p 取模的值。
输入格式
三个整数 a,b,p ,在同一行用空格隔开。
输出格式
输出一个整数,表示a^b mod p的值。
数据范围
1≤a,b,p≤10^9
输入样例:
3 2 7
输出样例:
2
首先,我们最直接的想法是直接用循环求出a的b次幂,之后对p取模,但是我们认真思考一下会发现,这种算法一是复杂度较高,二是会导致数据溢出,所以这种方法不可取,我们会想到位运算
210=22∗28=221∗2232^{10} = 2^{2}*2^{8} = 2^{2^1}*2^{2^3}210=22∗28=221∗223
10的二进制数可以表示为1010,我们可以初始ans =1%p,然后对b的二进制表示下的每一位进行判断,如果是1,就将现在这个状态下的b积到ans上
#include <iostream>
#include <cstdio>
using namespace std;/*
int power(int a,int b,int p)
{int ans = 1 % p;for(; b; b>>=1){if(b&1) ans = (long long)ans * a % p;//3^10 = 3^2 * 3^8 10 = 1010 倒数第二位和第四位不为0a = (long long) a * a % p; cout<<a<<" "<<b<< endl;}return ans;
}
*/int pow(int a,int b,int p)
{int ans = 1 % p;for(b; b; b>>=1){if(b&1) ans = (long long )ans * a % p;a = (long long) a * a % p;}return ans;
}int main()
{long long a,b,p;scanf("%lld %lld %lld",&a,&b,&p);printf("%lld\n",pow(a,b,p));return 0;
}
a*b%p问题与之类似,不同之处在于,ans初始为0;判断b的二进制最后一位为1的话,ans = (ans+a)%p;a = a * 2 % p
求 a 乘 b 对 p 取模的值。
输入格式
第一行输入整数a,第二行输入整数b,第三行输入整数p。
输出格式
输出一个整数,表示a*b mod p的值。
数据范围
1≤a,b,p≤1018
输入样例:
3
4
5
输出样例:
2
#include <iostream>typedef long long LL;using namespace std;LL mod(LL a,LL b,LL p)
{LL ans = 0;for(;b;b>>=1){if(b&1) ans = (ans + a) % p;a = a * 2 % p;}return ans;
}
int main()
{LL a,b,p;cin>>a>>b>>p;cout<<mod(a,b,p)<<endl;return 0;
}
由于初学算法,欢迎大佬评论指正,谢谢
a*b%p a^b%p(快速幂)相关推荐
- 矩阵快速幂+构造方法
与快速幂一样,可以将递推式通过二进制的方式来进行优化,这个学了快速幂就是十分容易理解 大概的板子如下: struct mat///自己定义大小的矩阵 {ll m[11][11]; }; mat mul ...
- 【做题】SRM701 Div1 Hard - FibonacciStringSum——数学和式&矩阵快速幂
原文链接 https://www.cnblogs.com/cly-none/p/SRM701Div1C.html 题意:定义"Fibonacci string"为没有连续1的01串 ...
- 快速幂 + 矩阵快速幂
快速幂 1 #include<iostream> 2 #include<algorithm> 3 #include<cstring> 4 #define LL lo ...
- BZOJ1965 [Ahoi2005]SHUFFLE 洗牌 快速幂
欢迎访问~原文出处--博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1965 题意概括 对于扑克牌的一次洗牌是这样定义的,将一叠N(N为偶数)张扑克牌平均分成上下两叠,取 ...
- 牛客网练习赛44-B(快速幂+模拟)
题目链接:https://ac.nowcoder.com/acm/contest/548/B 题意:计算m/n小数点后k1位到k2位,1≤m≤n≤109,1<=k1<=k2<=109 ...
- 【ACM】杭电OJ 4704 Sum (隔板原理+组合数求和公式+费马小定理+快速幂)
http://acm.hdu.edu.cn/showproblem.php?pid=4704 1.隔板原理 1~N有N个元素,每个元素代表一个1.分成K个数,即在(N-1)个空挡里放置(K-1)块隔板 ...
- HDU4549(矩阵快速幂+快速幂)
f(n)=a^f(n-1) + b^f(n-2):计算矩阵部分用矩阵快速幂:计算a的幂次和b的幂次用快速幂. #include<iostream> #include<algorith ...
- [HNOI2008]GT考试[矩阵快速幂+kmp优化的dp]
解题思路:假如说我们用f[i]表示长度为i的串能组合成无不吉利数字的组合的个数的话我们无法找到f[i]和f[i+1]的关系,就是我们下一位填某个数字会不会出现不吉利串,这就和你前面的串末尾于不吉利串重 ...
- 解题报告(一)B、(CF453D) Little Pony and Elements of Harmony(FWT经典套路 + 任意模数 k 进制FWT + 快速幂)(2)
繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...
- 【学习笔记】超简单的多项式快速幂
整理的算法模板合集: ACM模板 目录 P5245 [模板]多项式快速幂 普通版(a0=1a_0=1a0=1) vector版本AC代码 加强版(a0≠1a_0 \neq 1a0=1) 点我看 ...
最新文章
- 50个令人大开眼界的 Matplotlib 可视化项目
- 京东三级列表页持续架构优化—前端优化实践
- [翻译]Go与C#的比较,第二篇:垃圾回收
- 对象包装器与自动(拆箱)装箱+参数数量可变的方法+枚举类
- 延长汽车寿命的6个良好习惯
- sklearn之Model Selection 估计器
- Fragment懒加载(三)
- win7锁定桌面计算机图标,Win7锁定桌面图标的详细步骤(图文)
- 计算机网络(第 8 版)第 1 章概述 谢希仁 编著
- Java初学者作业——定义客户类(Customer),客户类的属性包括:姓名、年龄、电话、余额、账号和密码;方法包括:付款。
- php laravel mix,引入 Laravel Mix 管理前端资源
- 【C++】优先级队列priority_queue模拟实现仿函数
- 一键生成属于自己的QQ历史报告,看看你对自己的QQ了解程度有多深?
- python多任务,线程详解
- SAP 针对国家 country, 维护税码 tax code
- (1)定义圆Circle类,包含radius半径属性,求面积方法,求周长方法,返返回圆对象的详细信息的方法(2)在测试类中创建长度为5的Circle[]数组,用来装5个圆对象
- Linux系统管理学习计划
- matlab读txt文件
- abap源代码---正常生产订单打印/两种选择
- Linux 配置nginx和php代理 ip访问
热门文章
- java超类 子类_Java超类引用子类对象的规律
- redis-py 模块的 hset 与 hmset 之间的区别
- 用力和应变片计算弹性模量_弹性模量巴氏论文,关于应变电测法测定巴氏合金ZChSnSb11-6力学性能相关参考文献资料-免费论文范文...
- @Scheduled(cron = 0 0 * * * ?)实现定时任务
- R语言处理高斯光束的光场分布图像
- sinx*cosx的数学期望怎么算
- java毕业设计企业售后服务管理系统mybatis+源码+调试部署+系统+数据库+lw
- 怎么估算一个网站建设成本?大概多少钱?
- 看了会哭,APP推广沙龙高手分享精华纪要版
- 程序员婚恋铁律:男人三不娶,护士幼师银行女,欢迎留言讨论