m的n次方高效算法求解

寒潭烟光 2017-02-25 04:20:43
优化m^n的算法使乘法次数尽可能小(规定用递归方法,但直接乘n-1次效率低,要求用尽可能高效的方法),怎么写啊,哪位大神解答一下。
...全文
1153 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
m1478 2017-02-25
  • 打赏
  • 举报
回复
百度百科:快速幂。 传送门:http://baike.baidu.com/item/%E5%BF%AB%E9%80%9F%E5%B9%82?fr=aladdin
flying_music 2017-02-25
  • 打赏
  • 举报
回复
引用 3 楼 jianwen0529 的回复:
[quote=引用 1 楼 cyfcsd 的回复:] 注意别溢出了 code=c]#include <stdio.h> int power(int p, int n) { if(n == 1){ return p; } else{ int tmp = power(p, n/2); if(n%2 == 0){ return tmp*tmp; } else{ return tmp*tmp*p; } } } int main() { printf("%d\n", power(2, 10)); return 0; }[/code]
乘法次数感觉并没有变少[/quote] 应该是减少了吧,算法复杂度降低为O(log2N)了,楼主可百度快速幂
worldy 2017-02-25
  • 打赏
  • 举报
回复
double PowX(double x,int m)
{
	if (m==0)
	{
		return 1;
	}
	if (m==1)
	{
		return x;
	}
	if (m==2)
	{
		return x*x;
	}

	int n=m>>1;
	double x1=PowX(x,n);

	if (n<<1==m)
	{
		return x1*x1;
	}
	else
	{
		return x1*x1*x; 
	}
}
幻夢之葉 2017-02-25
  • 打赏
  • 举报
回复
引用 1 楼 cyfcsd 的回复:
注意别溢出了 code=c]#include <stdio.h> int power(int p, int n) { if(n == 1){ return p; } else{ int tmp = power(p, n/2); if(n%2 == 0){ return tmp*tmp; } else{ return tmp*tmp*p; } } } int main() { printf("%d\n", power(2, 10)); return 0; }[/code]
乘法次数感觉并没有变少
mxway 2017-02-25
  • 打赏
  • 举报
回复
1楼使用的是快速幂算法吧。
flying_music 2017-02-25
  • 打赏
  • 举报
回复
注意别溢出了 code=c]#include <stdio.h> int power(int p, int n) { if(n == 1){ return p; } else{ int tmp = power(p, n/2); if(n%2 == 0){ return tmp*tmp; } else{ return tmp*tmp*p; } } } int main() { printf("%d\n", power(2, 10)); return 0; }[/code]

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧