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(快速幂)相关推荐

  1. 矩阵快速幂+构造方法

    与快速幂一样,可以将递推式通过二进制的方式来进行优化,这个学了快速幂就是十分容易理解 大概的板子如下: struct mat///自己定义大小的矩阵 {ll m[11][11]; }; mat mul ...

  2. 【做题】SRM701 Div1 Hard - FibonacciStringSum——数学和式&矩阵快速幂

    原文链接 https://www.cnblogs.com/cly-none/p/SRM701Div1C.html 题意:定义"Fibonacci string"为没有连续1的01串 ...

  3. 快速幂 + 矩阵快速幂

    快速幂 1 #include<iostream> 2 #include<algorithm> 3 #include<cstring> 4 #define LL lo ...

  4. BZOJ1965 [Ahoi2005]SHUFFLE 洗牌 快速幂

    欢迎访问~原文出处--博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1965 题意概括 对于扑克牌的一次洗牌是这样定义的,将一叠N(N为偶数)张扑克牌平均分成上下两叠,取 ...

  5. 牛客网练习赛44-B(快速幂+模拟)

    题目链接:https://ac.nowcoder.com/acm/contest/548/B 题意:计算m/n小数点后k1位到k2位,1≤m≤n≤109,1<=k1<=k2<=109 ...

  6. 【ACM】杭电OJ 4704 Sum (隔板原理+组合数求和公式+费马小定理+快速幂)

    http://acm.hdu.edu.cn/showproblem.php?pid=4704 1.隔板原理 1~N有N个元素,每个元素代表一个1.分成K个数,即在(N-1)个空挡里放置(K-1)块隔板 ...

  7. HDU4549(矩阵快速幂+快速幂)

    f(n)=a^f(n-1) + b^f(n-2):计算矩阵部分用矩阵快速幂:计算a的幂次和b的幂次用快速幂. #include<iostream> #include<algorith ...

  8. [HNOI2008]GT考试[矩阵快速幂+kmp优化的dp]

    解题思路:假如说我们用f[i]表示长度为i的串能组合成无不吉利数字的组合的个数的话我们无法找到f[i]和f[i+1]的关系,就是我们下一位填某个数字会不会出现不吉利串,这就和你前面的串末尾于不吉利串重 ...

  9. 解题报告(一)B、(CF453D) Little Pony and Elements of Harmony(FWT经典套路 + 任意模数 k 进制FWT + 快速幂)(2)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  10. 【学习笔记】超简单的多项式快速幂

    整理的算法模板合集: ACM模板 目录 P5245 [模板]多项式快速幂 普通版(a0=1a_0=1a0​=1) vector版本AC代码 加强版(a0≠1a_0 \neq 1a0​​=1) 点我看 ...

最新文章

  1. 50个令人大开眼界的 Matplotlib 可视化项目
  2. 京东三级列表页持续架构优化—前端优化实践
  3. [翻译]Go与C#的比较,第二篇:垃圾回收
  4. 对象包装器与自动(拆箱)装箱+参数数量可变的方法+枚举类
  5. 延长汽车寿命的6个良好习惯
  6. sklearn之Model Selection 估计器
  7. Fragment懒加载(三)
  8. win7锁定桌面计算机图标,Win7锁定桌面图标的详细步骤(图文)
  9. 计算机网络(第 8 版)第 1 章概述 谢希仁 编著
  10. Java初学者作业——定义客户类(Customer),客户类的属性包括:姓名、年龄、电话、余额、账号和密码;方法包括:付款。
  11. php laravel mix,引入 Laravel Mix 管理前端资源
  12. 【C++】优先级队列priority_queue模拟实现仿函数
  13. 一键生成属于自己的QQ历史报告,看看你对自己的QQ了解程度有多深?
  14. python多任务,线程详解
  15. SAP 针对国家 country, 维护税码 tax code
  16. (1)定义圆Circle类,包含radius半径属性,求面积方法,求周长方法,返返回圆对象的详细信息的方法(2)在测试类中创建长度为5的Circle[]数组,用来装5个圆对象
  17. Linux系统管理学习计划
  18. matlab读txt文件
  19. abap源代码---正常生产订单打印/两种选择
  20. Linux 配置nginx和php代理 ip访问

热门文章

  1. java超类 子类_Java超类引用子类对象的规律
  2. redis-py 模块的 hset 与 hmset 之间的区别
  3. 用力和应变片计算弹性模量_弹性模量巴氏论文,关于应变电测法测定巴氏合金ZChSnSb11-6力学性能相关参考文献资料-免费论文范文...
  4. @Scheduled(cron = 0 0 * * * ?)实现定时任务
  5. R语言处理高斯光束的光场分布图像
  6. sinx*cosx的数学期望怎么算
  7. java毕业设计企业售后服务管理系统mybatis+源码+调试部署+系统+数据库+lw
  8. 怎么估算一个网站建设成本?大概多少钱?
  9. 看了会哭,APP推广沙龙高手分享精华纪要版
  10. 程序员婚恋铁律:男人三不娶,护士幼师银行女,欢迎留言讨论