【发布时间】:2018-01-15 21:36:11
【问题描述】:
你好!
我一直在理解模幂的概念。当我需要这个以及它是如何工作的。
假设我将幂函数称为:power(2,n-1)。
n=10 的循环将如何执行,以及以下问题的时间和空间复杂度
#define m 1000000007
unsigned long long int power(unsigned long long int x, unsigned long long int n){
unsigned long long int res = 1;
while(n > 0){
if(n & 1){
res = res * x;
res = res % m;
}
x = x * x;
x= x % m;
n >>= 1;
}
return res;
}
【问题讨论】:
-
您的问题“循环将如何执行,例如 n=10”尚不清楚。你不能把这些步骤写在纸上或者使用调试器看看在这种特殊情况下会发生什么吗?在任何情况下,您的 x 和 n 值都太小,无法通过 m 进行模数运算,因此这不是最好的例子案子。您的意思是要问一般来说,该功能是如何以及为什么起作用的?
-
是的@RoryDaulton。这个函数是如何工作的?
-
搜索“平方求幂”,这将解释除
% m行之外的所有内容,这些行用于使所有内容都以m为模。如果这些解释中有什么你不明白的,那么回来询问更多细节。 -
注意:(a * b) mod m == ((a mod m) * (b mod m)) mod m 这个关系可以用来保持中间值在范围内。跨度>