zoukankan      html  css  js  c++  java
  • 分治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 } 

  • 相关阅读:
    文档测试
    浅谈兼容性测试
    配置测试
    测试产品说明书
    LeetCode
    LeetCode
    LeetCode
    LeetCode
    LeetCode
    LeetCode
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/7135641.html
Copyright © 2011-2022 走看看