幂运算

【题目描述】

从m开始,只需要进行6次运算就可以算出m31

m2=m×m

m4=m2×m2

m8=m4×m4

m16=m8×m8

m32=m16×m16

m31=m32÷m

现询问从m开始,算出mn所需的最少运算次数。

【输入描述】

输入一个正整数n(n <= 1000)。

【输出描述】

输出一个整数,表示答案。

【样例输入】

样例1:

1

样例2:

31

样例3:

70

【样例输出】

样例1:

0

样例2:

6

样例3:

8

时间: 2024-07-29 04:31:48

幂运算的相关文章

2541 幂运算

2541 幂运算 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 从m开始,我们只需要6次运算就可以计算出m31: m2=m×m,m4=m2×m2,m8=m4×m4,m16=m8×m8,m32=m16×m16,m31=m32÷m. 请你找出从m开始,计算mn的最少运算次数.在运算的每一步,都应该是m的正整数次方,换句话说,类似m-3是不允许出现的. 输入描述 Input Description 输入为一

【分治】快速幂运算-递归与非递归方法

问题 Q: [分治]快速幂运算 时间限制: 1 Sec  内存限制: 128 MB提交: 14  解决: 9[提交][状态][讨论版] 题目描述 邪狼:“老大,好像还是不够油钱啊?”修罗王:“看来只好用我的独门绝技----能力增持术了.”邪狼:“听说能量增持数很霸道的?”修罗王:“没错,假设初始燃油能提供的能量为X,当我对它进行能量增持n秒后,该然后的能量将达到Xn”邪狼:“这么强大的技能啊,简直逆天了,不过怎么之前不见老大用过?”修罗王:“偶尔偷偷用几次没关系,经常用,燃油公司会找我麻烦的.”

求幂运算、多项式乘法及Horner法则的应用

一,两种不同的求幂运算 求解x^n(x 的 n 次方) ①使用递归,代码如下: 1 private static long pow(int x, int n){ 2 if(n == 0) 3 return 1; 4 if(n == 1) 5 return x; 6 if(n % 2 == 0) 7 return pow(x * x, n / 2); 8 else 9 return pow(x * x, n / 2) * x; 10 } 分析: 每次递归,使得问题的规模减半.2到6行操作的复杂度为

快速幂运算(非大数)

快速幂顾名思义,就是快速算某个数的多少次幂.其时间复杂度为 O(log?N), 与朴素的O(N)相比效率有了极大的提高. 下面以3­16 为例: 一般运算方式是: 316 = 3*3*3*3……*3 这样的话需要运算15次 而快速幂运算的方式是: 316 = (32)8 = ((32)2)4 = (((32)2)2)2 这样的话只需要运算4次 不难看出,快速幂运算其实就是每次运算时把底数平方,指数减半,从而提高效率. 显然,当指数为奇数时,我们要作一些特殊处理: 以711为例: 711 = 71

快速求幂运算笔记

如何快速求x得n次方呢? 首先C++里面有个pow如何实现呢?自己查查,里面使用double,肯定更麻烦,还有jianzhi 我们会顺手写下 int res=1; for(int i=1;i<=n;i++) { res*=x; } 学习一下快速幂,logn内计算出来,使用N的二进制,只需要logN就可以计算. 正要的就是计算每个为1对应的基数.列入: 11是多少?是二进制的话,就是1*2^1+1 那么x^(11)呢,两个1对应的基数是多少呢?低位1对应的是X,高位1对应的是X^2,因此,就是位于

复数的幂运算-工程数学笔记

复数的幂运算 根据欧拉公式有: 根据De Moivre' law有: 示例:

组合数学 - 置换群的幂运算 --- poj CARDS (洗牌机)

CARDS Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 1448   Accepted: 773 Description Alice and Bob have a set of N cards labelled with numbers 1 ... N (so that no two cards have the same label) and a shuffle machine. We assume that N i

通过程序了解快速幂和模取幂运算的优化

建议先看第三个有解释的程序. 快速幂a^b 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int main() 5 { 6 long a,b,result=1; 7 //a^b 8 scanf("%ld%ld",&a,&b); 9 while (b) 10 { 11 if ((b & 1)==1) 12 result=result*a; 13 a=a*a; 14 b>>=1; 1

迭代加深搜索 codevs 2541 幂运算

codevs 2541 幂运算 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 从m开始,我们只需要6次运算就可以计算出m31: m2=m×m,m4=m2×m2,m8=m4×m4,m16=m8×m8,m32=m16×m16,m31=m32÷m. 请你找出从m开始,计算mn的最少运算次数.在运算的每一步,都应该是m的正整数次方,换句话说,类似m-3是不允许出现的. 输入描述 Input Description 输入为一个正整

LeetCode OJ:Pow(x, n) (幂运算)

Implement pow(x, n). 幂运算,简单的方法snag然很好实现,直接循环相乘就可以了,但是这里应该不是那种那么简单,我的做法使用到了一点递归: 1 class Solution { 2 public: 3 double myPow(double x, int n) { 4 if(n == INT_MIN) 5 return 1.0* x/myPow(x, INT_MAX); 6 if(n < 0) 7 return 1.0/myPow(x, -n); 8 else if(n ==