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 } 

  • 相关阅读:
    微信扫码
    vue h5公众号支付
    vue h5支付宝支付
    vue PDF预览
    vue 中AES加密
    vue 动态路由配置
    移动端调试工具
    Ajax工作原理
    yahoo军规
    Flex 布局教程
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/7135641.html
Copyright © 2011-2022 走看看