快速幂是什么?

顾名思义,快速幂就是快速算底数的n次幂。其时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高。

就以a的b次方来介绍:
把b转换成二进制数,该二进制数第i位的权为

例如:

11的二进制是1011
11 = 2³×1 + 2²×0 + 2¹×1 + 2º×1
因此,我们将a¹¹转化为算

如何编写快速幂代码?

以下是用C++语言编写的两种代码,可供各位参考:

 //快速幂1(数字较小):
#include<bits/stdc++.h>
using namespace std;
long long f(long long n,long long m)
{
//求的是m个n相乘,这里n是一个正整数
if(m==)return ;
else if(m==)return n;
else if(m%==)return f(n*n,m/);//偶数时的降幂
return f(n*n,m/)*n;//奇数时的降幂
}
int main()
{
long long n,m;
cin>>n>>m;
cout<<f(n,m);
return ;
}
 //快速幂2(数字较大):
#include<bits/stdc++.h>
using namespace std;
int k;
long long f(long long n,long long m)
{
//求的是m个n相乘,这里n是一个正整数
if(m==)return ;
else if(m==)return n%k;
else if(m%==)return f((n%k)*(n%k),m/)%k;//偶数时的降幂
return f((n%k)*(n%k),m/)*(n%k)%k;//奇数时的降幂
}
int main()
{
long long n,m;
cin>>n>>m>>k;
cout<<f(n,m);
return ;
}

记住一点:数字较大的时候只要把原先的程序能模(%)的都模掉,否则数据太大,容易报表!

下面给大家一道题提升一下,如果大家有想法,可以私信我哦!(下期告诉大家参考答案)

题目描述 Description
有n头奶牛住在n个环形的牛圈,奶牛编号为0到n-1,牛圈编号也为0到n-1,i号牛住在第i号牛圈。
现在牛们想实施住宅滚动制度。每滚动一次,第0号圈的奶牛会顺时针搬到第m号牛圈中,第1号圈的奶牛会顺时针搬到第1+m号牛圈中,...,第n-m号圈的奶牛会顺时针搬到0号牛圈,
也就是说原来的第i号牛圈的奶牛会顺时针搬到i+m号牛圈。
试判断,进行了10^k轮滚动后,原来在x号圈的奶牛现在在几号牛圈。

输入描述 Input Description
一行,四个正整数,n m k x

输出描述 Output Description
10^k轮后,最初在第x个圈的奶牛所处牛圈的编号

样例输入 Sample Input
10 3 4 5

样例输出 Sample Output
5

数据范围及提示 Data Size & Hint
对于 30%的数据,0 < k < 7;
对于 80%的数据,0 < k < 10^7;
对于 100%的数据,1 < n < 1,000,000,0 < m < n,1 <= x <=n,0 < k < 10^9。

最新文章

  1. POJ 题目分类(转载)
  2. Number To Indian Rupee Words in Oracle Forms / Reports
  3. Gradle用户指南(章9:Groovy快速入门)
  4. Web Service无法加载协定为“ServiceReference1.xxxxxx”的终结点配置部分,因为找到了该协定的多个终结点配置。请按名称指示首选的终结点配置部分
  5. 6.ipv6地址配置
  6. D3D11_USAGE使用
  7. Oracle中对列加密的方法
  8. eclipse 添加resources 目录
  9. cron 定时任务
  10. Ubuntu14.04配置3389远程桌面连接
  11. JAVA 平台
  12. Docker在Linux/Windows上运行NetCore文章系列
  13. SpringBoot关于SpringDataJpa中findOne()方法报错问题
  14. Python Yaml 学习
  15. idea 添加 VUE 的语法支持和开发
  16. Git管理多个SSH密钥,Git多帐号配置
  17. sublime + emmet(Zen Coding)
  18. How to use jQuery countdown plugin
  19. LaTeX中的数学公式
  20. [您有新的未分配科技点]数位DP:从板子到基础(例题 bzoj1026 windy数 bzoj3131 淘金)

热门文章

  1. Python全栈工程师(Python3 所有基础内容 0-0)
  2. QEMU 代码分析:BIOS 的加载过程
  3. mysql新建用户并授权
  4. SpringBoot2.0WebFlux响应式编程知识总结
  5. WCF双工通信笔记
  6. IE(IE6/IE7/IE8)支持HTML5标签
  7. swift学习之Label
  8. HRBUST1310 火影忍者之~鸣人 2017-03-06 16:01 104人阅读 评论(0) 收藏
  9. java并发编程实战:第二章----线程安全性
  10. Python入门基础学习 一