java写的三个求乘法逆元的算法:
第一个是著名的扩展欧拉算法
第二个是网上发现的一个牛人写的算法
第三个是我这个菜鸟补充的一个最垃圾的算法
在对较小的数进行运算的时候,后两种算法都比第一个快,第三个比其他两个都快。
在对较大的数进行运算的时候,第一种算法最快,第三种算法求得的结果由于java里int位数关系导致结果出错。
public int extendEuclid(int e, int modValue){
int D = 0;
int x1, x2, x3, y1, y2, y3, t1, t2, t3;
x1 = y2 = 1;
x2 = y1= 0;
x3 = e;
y3 = modValue;
int q = 0;
while(true){
if(y3 == 1){
D = y2;
break;
}
if(y3 == 0){
D = y2;
break;
}
q = x3 / y3;
t1 = x1 - q*y1;
t2 = x2 - q*y2;
t3 = x3 - q*y3;
x1 = y1;
x2 = y2;
x3 = y3;
y1 = t1;
y2 = t2;
y3 = t3;
}
return D<0?e+D:D;
}
public int extendedEuclid(int e, int modValue){
int i;
int over= e;
for(i=1; i
{
over= over % modValue;
if( over==1 )
{
return i;
}
else
{
if(over+e<= modValue)
{
do
{
i++;
over += e;
}
while( over+e <= modValue );
}
else
{
i++;
over +=e;
}
}
}
return 0;
}
public void myEuclid(int e, int modValue){
int x = e;
int num = e;
int d = 1;
while((num % modValue ) != 1){
d++;
num += e;
}
System.out.println(d);
}