分治2--取余运算

Posted 范仁义

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分治2--取余运算相关的知识,希望对你有一定的参考价值。

分治2--取余运算

一、心得

 

二、题目和分析

 

题目描述

输入b,p,k的值,求bp mod k的值。其中b,p,k*k为长整型数。

输入

三个整数,分别为b,p,k的值

输出

bp mod k

样例输入

2 10 9

样例输出

2^10 mod 9=7

提示

解题思路:分治,顾名思义,把一个大问题分解为多个小问题。

   这里有一个公式,利用这个公式通过递归求得。

 

三、代码和结果

 

 1 /*
 2 递推方程
 3 边界
 4 p==0 1
 5 p/2==0 f(p)=f(p/2)*f(p/2)  
 6 p/2==1 f(p)=f(p/2)*f(p/2)*f(1) 
 7 */
 8 #include <iostream>
 9 #define ll long long
10 using namespace std;
11 
12 ll f(ll b,ll p,ll k){
13     if(p==0) return 1;
14     else {
15         ll tmp=f(b,p/2,k);
16         ll ans=((tmp%k)*(tmp%k))%k;
17         if(p/2==1) ans=(ans*(b%k))%k;
18         return ans;
19     }
20 }
21 
22 int main(){
23     ll b,p,k;
24     cin>>b>>p>>k;
25     cout<<f(b,p,k)<<endl;
26     return 0;
27 } 

 

以上是关于分治2--取余运算的主要内容,如果未能解决你的问题,请参考以下文章

取余运算(mod)(分治)

Luogu P1226 取余运算||快速幂(数论,分治)

分治算法

java中取余运算符 (%)

salesforce 零基础学习(四十三)运算取余

位运算取余取模