java写的三个求乘法逆元的算法

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<modValue; ) { 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); } 

你可能感兴趣的:(java,算法,扩展)