快速幂算法#洛谷P1226 【模板】快速幂||取余运算

快速幂算法#洛谷P1226

最近学习了分治算法的基本思想。所谓分治算法,就是将大问题分成若干个容易解决的子问题,子问题继续分,直到该问题可以一步求解。
分治算法有四点特征:
1、问题缩小到一定的规模就可以容易地解决。
2、该问题可以分为若干个规模较小的相同问题,即该问题具有最优子结构。
3、利用该问题分解出来的子问题的解可以合并成原问题的解。
(如果不具有这条特征而具有前两条特征,可以考虑采用贪心或者动态规划)
4、各子问题之间彼此独立。

————————————手动分割线——————————————————
接下来我们来看这道快速幂。

题目描述
给你三个整数 b,p,k,求 bp mod k。

输入格式
一行三个整数 b,p,k

输出格式
输出 bp mod k=s

s 为运算结果

输入输出样例

输入 #1
2 10 9

输出 #1
2^10 mod 9=7

说明/提示
【样例解释】

2^10=1024,1024 mod 9 = 7。

【数据范围】
对于 100% 的数据,0≤b,p,k < 231

代码如下:

#include<bits/stdc++.h>
using namespace std;

typedef long long ll;


ll quickpow(ll b,ll p,ll k){
	ll ans=1;
	if(p==0)return 1%k;
	while(p){
		if(p%2)
			ans=(ans*b)%k;
		b=(b*b)%k;
		p/=2;
	}
	return ans;
}

int main(){
	ll b,p,k;//b是底数   p是幂数  k是取模数 
	scanf("%lld%lld%lld",&b,&p,&k);
	printf("%lld^%lld mod %lld=%lld\n",b,p,k,quickpow(b,p,k));
}

PS:这篇博客是给我这个蒟蒻自学复习用的

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值