【发布时间】:2017-07-16 13:33:29
【问题描述】:
unsigned long qe2(unsigned long x, unsigned long y , unsigned long n)
{
unsigned long s,t,u;
s=1; t=x; u=y;
while(u)
{
if(u&1)
s = (s*t)%n;
u>>=1;
t= ( t*t)%n;
}
return s;
}
我正在阅读密码学,并且在 Bruice Schneier 的《应用密码学》一书中,我发现上述算法可以以较低的计算成本计算 (x^y)mod n。它基本上使用一种称为加法链接的算法来减少计算中的乘法量。我可以在笔和纸上使用这个过程,但是尽管一遍又一遍地阅读上面的代码,我还是无法理解它是如何工作的。所以请指点我正确的方向(某种文章的链接),在那里我可以分析上述算法,或者如果你能在这里给出解释,那将非常有帮助。
附: : 书中没有解释代码。
【问题讨论】:
-
了解其工作原理的最佳方法可能是使用调试器逐行执行代码。然后观察变量值在每一步是如何变化的。
-
“加法链”是用来描述这类算法的通用术语。但是,这是一种简化的特殊情况,通常称为 right-to-left binary exponentiation algorithm,您可以使用该搜索词找到很多文档。
-
您应该针对特定问题提出特定问题。由于 Stack Overflow 向您隐藏了关闭原因:“要求我们推荐或查找书籍、工具、软件库、教程或其他非现场资源的问题对于 Stack Overflow 来说是无关紧要的,因为它们往往会吸引固执己见的答案和垃圾邮件。相反,请描述问题以及迄今为止为解决该问题所做的工作。"
标签: c++ math cryptography modular-arithmetic