与Exponentiation相关的任务的更好算法

时间:2016-06-09 01:11:01

标签: algorithm

最近我在竞赛中发现了一个有趣的任务,但没有任何作者解决方案或解释如何解决。

该任务包括以下内容:用户被赋予一个数字N,并且必须计算a^N(基于n的幂,而不是xor运算),其中我只能通过乘以a来计算,或者之前的结果。为了得到计算a^n,我应该给出最少量的计算。

示例:

N=27
Then the answer is 6:
a^2=a*a
a^3=a^2*a
a^6=a^3*a^3
a^9=a^3*a^6
a^18=a^9*a^9
a^27=a^18*a^9

N的限制如下:N<=40000。时间和内存限制为:2s and 256MB

解决此任务的好方法是什么?

提前谢谢!!!

1 个答案:

答案 0 :(得分:0)

这是一个简单的解决方案但速度不够快。 我希望有人可以通过一些调整来增强这一点吗? 或者只是对解决问题感兴趣的人。

while(pow(2, n)< atoi(argv[1])) n++;
cout << n;

让我们问另一种方式.. 通过计算n次我能知道多远? 它每次只增加一倍。 我错过了什么吗? 也就是说,只有这一行,

var app = angular.module('daily', ['ui.router']);

可以获得结果。