码迷,mamicode.com
首页 > 其他好文 > 详细

分治2--取余运算

时间:2017-07-08 10:04:29      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:space   std   clu   分治   pac   ace   http   center   strong   

分治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--取余运算

标签:space   std   clu   分治   pac   ace   http   center   strong   

原文地址:http://www.cnblogs.com/Renyi-Fan/p/7135641.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!