递归实现快速幂(C++版)
快速幂是什么?
顾名思义,快速幂就是快速算底数的n次幂。其时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高。
例如:

如何编写快速幂代码?
以下是用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++版)的更多相关文章
- CDOJ 1280 772002画马尾 每周一题 div1 矩阵快速幂 中二版
"问题:众所周知772002很喜欢马尾,所以他决定画几幅马尾送给他的女朋友. 772002会画m种马尾,772002还有n张纸,n张纸分别编号1到n,每张纸上只能画一种马尾. 然而77200 ...
- 51Nod 1632 B君的连通(递归,快速幂)
1632 B君的连通 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 B国拥有n个城市,其交通系统呈树状结构,即任意两个城市存在且仅存在一条交通线将其连接.A国是B ...
- UVA 10006 - Carmichael Numbers 数论(快速幂取模 + 筛法求素数)
Carmichael Numbers An important topic nowadays in computer science is cryptography. Some people e ...
- 快速幂 递归&&非递归 模板
一.递归版快速幂 inline int qpow(int x,int y,int p){ if(y==0) return 1; int z=qpow(x,y>>1,p); z=1ll*z* ...
- 【指数型母函数+非递归快速幂】【HDU2065】"红色病毒"问题
大一上学完数分上后终于可以搞懂指数型母函数了.. 需要一点关于泰勒级数的高数知识 题目在此: "红色病毒"问题 Time Limit: 1000/1000 MS (Java/Oth ...
- BZOJ 3231: [Sdoi2008]递归数列( 矩阵快速幂 )
矩阵乘法裸题..差分一下然后用矩阵乘法+快速幂就可以了. ----------------------------------------------------------------------- ...
- 【bzoj3231】[Sdoi2008]递归数列 矩阵乘法+快速幂
题目描述 一个由自然数组成的数列按下式定义: 对于i <= k:ai = bi 对于i > k: ai = c1ai-1 + c2ai-2 + ... + ckai-k 其中bj和 cj ...
- 《剑指Offer》-006 - Java版快速幂 -解决n的m次方的问题
#### 如题 (总结要点) 原文链接 : 1.主题 package blank; /** * 类的详细说明 给定一个double类型的浮点数base和int类型的整数exponent.求base的e ...
- hdu 1575 Tr A(矩阵快速幂)
今天做的第二道矩阵快速幂题,因为是初次接触,各种奇葩错误整整调试了一下午.废话不说,入正题.该题应该属于矩阵快速幂的裸题了吧,知道快速幂原理(二进制迭代法,非递归版)后,剩下的只是处理矩阵乘法的功夫了 ...
随机推荐
- Django基础学习七之如何配置django+mysql
很久没有更新博客了,也有段时间没有持续性的学习了,感觉堕落了,今天继续开始学习吧 今天主要来学习一下在django下配置mysql的数据库和使用admin用户管理数据库 1.在project中的set ...
- Linux Terminator
NAME Terminator - Multiple GNOME terminals in one window SYNOPSIS terminator [options] DESCRIPTION T ...
- 4.jsp学习
1.创建 2.命名 3.utf-8防止乱码 5.导出WAR文件
- python之selenium调用js(execute_script)
转载: http://www.cnblogs.com/fnng/p/3230768.html 本节重点: 调用js方法 execute_script(script, *args) 在当前窗口/框架 同 ...
- error:Your local changes to the follwing files would be overwritten by merge
- jquery相对定位(包含find的使用 find相当于后代选择器)$("选择器1","选择器2")
- Spring boot——logback.xml 配置详解(二)
阅读目录 1 根节点包含的属性 2 根节点的子节点 文章转载自:http://aub.iteye.com/blog/1101260,在此对作者的辛苦表示感谢! 回到顶部 1 根节点<config ...
- Rhino 使 JavaScript 应用程序更灵动(转载)
脚本语言有良好的快速开发,高效率的执行,解释而非编译执行等优点,并且具有与其他语言编写的组件之间强大的通信功能.JavaScript 一直是脚本语言中的领头羊,它是一门具有非常丰富特性的语言.除了浏览 ...
- SqlServer获取字符串中数字,中文及字符部分数据
--获取英文字符数据 Create function [dbo].[Fun_GetChar] ( ) ) ) AS BEGIN BEGIN ,'') --删掉一个非数字的字符,循环结束,剩余的为数字部 ...
- 转-SourceTree注册atlassian账号SIGUP按钮灰色无法注册的问题
我们第一次安装sourcetree的时候会要求我们登陆一个账号 但是,会出现注册按钮变灰的怪现象 令人头疼的是,在官网也搞不定. 下面的网址可以顺利注册账号的网址 https://www.atlass ...