zoukankan      html  css  js  c++  java
  • ACM2035_(递归法求幂)

      /*

    编写一个递归算法,求解m的n次方。 

    我们一般求解m的n次方,一般使用n个m相乘的办法来求解。

    其实我们还可以使用另外一种更有效率的办法求解这个问题。

    我们知道一个数的0次方等于1,一个数的1次方等于该数本身。

    如果一个数的n次方的n可以被2整数,我们可以将求解的问题,

    分解为m的(n/2)次方乘以m的(n/2)次方。如果不能被2整除,

    则可以将问题求解转变为m乘以m的(n-1)次方,

    通过这个递归的办法,我们可以很快的分解求出问题。

    编写代码如下: 

    */

     
    
    unsigned long myPow(int m, int n) 
    { 
      unsigned long tmp; 
      if(n == 0) 
        return 1; 
      if(n == 1) 
        return m; 
      if(n % 2 == 0){ 
        tmp = myPow(m, n/2); 
        return tmp*tmp; 
      } 
      else{ 
        return m*myPow(m, n-1); 
      } 
    } 

    下面的是AC过的

    /*
    人见人爱“^ B
    
    时间限制:2000/1000 MS(JAVA /其他)内存限制:三万二千七百六十八分之六万五千五百三十六K(Java /其他的)
    总提交(S):16529接受提交():11706
    
    
    问题说明
    求ā^ B的最后三位数表示的整数。
    说明:A ^ B的含义是“”的乙次方“
     
    
    输入
    B = 0,则表示输入数据的结束,不做处理。
     
    
    产量
    对于每个测试实例,请输出A ^乙的最后三位表示的整数,每个输出占一行。
     
    
    采样输入
    2 3
    12 6
    6789 10000
    0 0
     
    
    样本输出
    8
    984
    1*/
    #include<stdio.h>
    int f(int m, int n, int p)
    {
        int k;
        if(n==1) return m%p;
         k=f(m,n/2,p);
         return (k*k*(n%2?m%p:1))%p;
    }
    int main()
    { 
        int m,n;
        while(scanf("%d%d",&m,&n),n||m)
            printf("%d
    ",(f(m,n,1000))%1000);
        return 0;
    }
  • 相关阅读:
    完全二分图生成树计数
    [luogu 1880]石子合并
    [vijos 1770]大内密探
    母函数入门笔记(施工中…
    【补】20160816训练记录
    20160819训练记录
    20160817训练记录
    POJ 2228 naptime
    POJ 3585 Accumulation Degree
    POJ 2182 Lost Cows
  • 原文地址:https://www.cnblogs.com/orangebook/p/3184033.html
Copyright © 2011-2022 走看看