zoukankan      html  css  js  c++  java
  • HDU2035 人见人爱A^B(快速幂)

    描述:

              求A^B的最后三位数表示的整数。说明:A^B的含义是“A的B次方”。

    输入:

              输入数据包含多个测试实例,每个实例占一行,由两个正整数A和B组成(1<=A,B<=10000),如果A=0, B=0,则表示输入数据的结束,不做处理。

    输出:

              对于每个测试实例,请输出A^B的最后三位表示的整数,每个输出占一行。

    样例输入:

              2 3

             12 6

             6789 10000

             0 0

    样例输出:

             8

             984

             1

    傻瓜代码如下(非快速幂):

     1 #include<cstdio>
     2 int main()
     3 {
     4     int a,b;
     5     int k=1;
     6     while(scanf("%d %d",&a,&b)!=EOF&&(a!=0&&b!=0)){
     7         for(int i=1;i<=b;i++){
     8             k*=a;
     9             k%=1000;    
    10         } 
    11         printf("%d
    ",k);
    12         k=1;
    13     }
    14     
    15     return 0;
    16 } 

    快速幂代码:

     1 #include<cstdio>
     2 int fastpow(int a,int b,int kkk){
     3     int ans=1;
     4     while(b > 0){
     5         if(b & 1){
     6             ans = ans*a%kkk;
     7         }
     8         b >>= 1;
     9         a= a*a%kkk;
    10     }
    11     return ans;
    12 }
    13 int main()
    14 {
    15     int a,b;
    16     int sum;
    17     while(scanf("%d %d",&a,&b)!=EOF&&(a!=0&&b!=0)){
    18         sum = fastpow(a,b,1000);
    19         printf("%d
    ",sum);
    20     }
    21     
    22     return 0;
    23 } 

    解题思路(快速幂):

              (11的二进制是1011.即11 = 2³×1 + 2²×0 + 2¹×1 + 2º×1。

              备忘录位运算:右移一位相当于除2.左移一位相当于乘2)

              本题正式思路:while循环就是控制当b为0的时候循环结束。if语句就是使用按位与“&”,当两边都为1,表达式为1,这个是用来判断二进制数最后一位是否为1。如果为1,ans就要乘x^i,i为该位在二进制数中的位置。>>为位运算符,右移一位,即去掉已经计算过的部分。最后的a= a*a%kkk;用来标记记录x^2^i,循环i次即去掉了i位,当第i+1位为1时,sum就要乘x^2^i。~

             

     

  • 相关阅读:
    javascript获取时间差
    鼠标上下滚动支持combobox选中
    用 CSS 实现元素垂直居中,有哪些好的方案?
    easyui form load 数据表单有下拉框
    Javascript 严格模式详解
    artTemplate 原生 js 模板语法版
    artTemplate 简洁语法版
    mysql 选择性高
    mysql 事件调度器
    Windows 抓取本地环路包
  • 原文地址:https://www.cnblogs.com/xzt6/p/5723515.html
Copyright © 2011-2022 走看看