快速幂是什么?

顾名思义,快速幂就是快速算底数的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。

递归实现快速幂(C++版)的更多相关文章

  1. CDOJ 1280 772002画马尾 每周一题 div1 矩阵快速幂 中二版

    "问题:众所周知772002很喜欢马尾,所以他决定画几幅马尾送给他的女朋友. 772002会画m种马尾,772002还有n张纸,n张纸分别编号1到n,每张纸上只能画一种马尾. 然而77200 ...

  2. 51Nod 1632 B君的连通(递归,快速幂)

    1632 B君的连通 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 B国拥有n个城市,其交通系统呈树状结构,即任意两个城市存在且仅存在一条交通线将其连接.A国是B ...

  3. UVA 10006 - Carmichael Numbers 数论(快速幂取模 + 筛法求素数)

      Carmichael Numbers  An important topic nowadays in computer science is cryptography. Some people e ...

  4. 快速幂 递归&&非递归 模板

    一.递归版快速幂 inline int qpow(int x,int y,int p){ if(y==0) return 1; int z=qpow(x,y>>1,p); z=1ll*z* ...

  5. 【指数型母函数+非递归快速幂】【HDU2065】"红色病毒"问题

    大一上学完数分上后终于可以搞懂指数型母函数了.. 需要一点关于泰勒级数的高数知识 题目在此: "红色病毒"问题 Time Limit: 1000/1000 MS (Java/Oth ...

  6. BZOJ 3231: [Sdoi2008]递归数列( 矩阵快速幂 )

    矩阵乘法裸题..差分一下然后用矩阵乘法+快速幂就可以了. ----------------------------------------------------------------------- ...

  7. 【bzoj3231】[Sdoi2008]递归数列 矩阵乘法+快速幂

    题目描述 一个由自然数组成的数列按下式定义: 对于i <= k:ai = bi 对于i > k: ai = c1ai-1 + c2ai-2 + ... + ckai-k 其中bj和 cj  ...

  8. 《剑指Offer》-006 - Java版快速幂 -解决n的m次方的问题

    #### 如题 (总结要点) 原文链接 : 1.主题 package blank; /** * 类的详细说明 给定一个double类型的浮点数base和int类型的整数exponent.求base的e ...

  9. hdu 1575 Tr A(矩阵快速幂)

    今天做的第二道矩阵快速幂题,因为是初次接触,各种奇葩错误整整调试了一下午.废话不说,入正题.该题应该属于矩阵快速幂的裸题了吧,知道快速幂原理(二进制迭代法,非递归版)后,剩下的只是处理矩阵乘法的功夫了 ...

随机推荐

  1. Implement Trie (Prefix Tree)实现字典树

    [抄题]: Implement a trie with insert, search, and startsWith methods. Note:You may assume that all inp ...

  2. MySQL 根据年、季度、月、周、日统计数据

    -- 计算每年订单的总价格 select date_format(t.order_time,'%Y') years,sum(t.order_amount) '总价格' from lf_order t ...

  3. Qt的安装和使用中的常见问题(简略版)

    对于喜欢研究细节的朋友,可参考Qt的安装和使用中的常见问题(详细版). 目录 1.引入 2.Qt简介 3.Qt版本 3.1 查看安装的Qt版本 3.2 查看当前项目使用的Qt版本 3.3 查看当前项目 ...

  4. 关于流程图设计,你需要Get的几点必备知识

    流程图(Flow Chart)这个概念对很多人来说并不陌生,但如果让你定义或者举例说明什么是产品流程图,恐怕还是有难度的.或许诸如“用户体验”.“交互设计”.“逻辑关系”等词会像走马灯般闪现在你的脑海 ...

  5. Quartz2D Text

    [Quartz2D Text] Quartz 2D provides a limited, low-level interface for drawing text encoded in the Ma ...

  6. jfinal框架教程

    jfinal框架教程 下面通过一个小例子了解jfinal的结构和特点 1.建数据库(我用的是oracle数据库,其他的相对也差不多) -- Create table create table CLAS ...

  7. HDU 6214 Smallest Minimum Cut (最小割且边数最少)

    题意:给定上一个有向图,求 s - t 的最小割且边数最少. 析:设边的容量是w,边数为m,只要把每边打容量变成 w * (m+1) + 1,然后跑一个最大流,最大流%(m+1),就是答案. 代码如下 ...

  8. gcc支持的一种结构体赋值方式

    struct info{ int a; char b; struct fd{    int c;    int d;          }fg;}; 其实我们也可以这样赋值:同样对于其他的类型也是一样 ...

  9. Spring3.x错误----java.lang.ClassNotFoundException:org.aspectj.weaver.reflect.ReflectionWorld$ReflectionWorldException

    Spring3.x错误: 解决方法: 缺少aspectjweaver.jar包 下载地址: https://cn.jarfire.org/aspectjweaver.html

  10. Charles网络工具

    Charles 是在 Mac 下常用的网络封包截取工具,在做移动开发时,我们为了调试与服务器端的网络通讯协议,常常需要截取网络封包来分析. Charles 通过将自己设置成系统的网络访问代理服务器,使 ...