HDU 1097.A hard puzzle-快速幂/取模

本文介绍了一种高效计算指数运算的方法——快速幂算法,并通过具体示例详细解释了其工作原理。此外,还提供了完整的C++代码实现,展示了如何在实际问题中应用该算法求解大数指数运算的最后一位数字。

快速幂:

代码:

ll pow_mod(ll a,ll b){
     ll ans=1;
     while(b){
         if(b%2==1){
             ans=ans*a%mod;
         }
         a=a*a%mod;
         b=b/2;                              //这里是转化为二进制之后的进位---左进位
     }
     return ans;
 }

 

例子:

  2^10       1 0 1 0 a=2,b=10   0-->a=a*a;a=4 进位为1-->ans=4;a=16;

                                                                      进位为0-->a=256;

                                                                      进位为1-->ans=4*256=1024;
  2^8         1 0 0 0 a=2,b=8    a=a*a  a=4 a=16  a=256 ans=ans*a;
  2^11       1 0 1 1 a=2,b=11   ans=2;a=4;ans=8;a=16;a=256;ans=8*256;

写了一道题:

这道题要在快速幂中取模,利用公式a*b%c=((a%c)*b)%c,这样每一步都进行这种处理,这就解决了a^b可能太大存不下的问题,但这个算法的时间复杂度依然没有得到优化

 

HDU1097A hard puzzle

 

Problem Description
lcy gives a hard puzzle to feng5166,lwg,JGShining and Ignatius: gave a and b,how to know the a^b.everybody objects to this BT problem,so lcy makes the problem easier than begin.
this puzzle describes that: gave a and b,how to know the a^b's the last digit number.But everybody is too lazy to slove this problem,so they remit to you who is wise.
 

 

Input
There are mutiple test cases. Each test cases consists of two numbers a and b(0<a,b<=2^30)
 

 

Output
For each test case, you should output the a^b's last digit number.
 

 

Sample Input
7 66 8 800
 

 

Sample Output
9 6
 
 
 
 
代码;
#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
ull mod=1e9;
ull pow(ull a,ull b){ ull ans=1;
   
while(b!=0){ if(b%2==1) ans=ans*a%mod; a=a*a%mod; b=b/2; } return ans; } int main(){ ull a,b; while(~scanf("%llu%llu",&a,&b)){ ull cnt=pow(a,b); ull ans=cnt%10; printf("%llu\n",ans); } return 0; }

 

 


 

转载于:https://www.cnblogs.com/ZERO-/p/6485682.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值