首页 > 代码库 > 分治2--取余运算
分治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--取余运算
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。