赞
踩
在密码学中,比如ECC的倍点运算中出现了计算 (5/20)mod23这种情况。那么这种情况我们怎么来用代码实现呢?
这就是要用到扩张的欧几里得算法。 即 ax+by=d的形式。
所以上式(5/20)mod23 我们一般化为 5*[(1/20)mod23]mod23的形式。
即先计算(1/a)mod b的形式, 转化为: ax+by=1.
计算出x后,在用 5x mod 20 即使最终答案。
注: 如果算出来x为负值,则需加 nb 即 n23 直到为正结束:
在扩展的欧几里得算法中: 传入参数 a b X-1 X0 其中(X-1赋初值为1 X0赋初值为0 )
所以其算法为:
public long ExGcd(long r1,long r2,long x1,long x2)
{
计算上里面的例子如下:
public void exg(){
//通过给定的参数分别计算出分子与分母的值。 上式中 分子:5 分母:20
int x=ExGcd(20,23,1,0);
while(x<0){
x+=23
}
x=5*x mod 23;//x即为最终的值
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。