每次我使用Euclid方法检查两个数字是否是共同素数.但是有一个解决方案使用这个代码来检查共同素数,并且这个时间比Euclid方法快得多:( 来源)
private static boolean isCoprime(long u, long v) {
if (((u | v) & 1) == 0)
return false;
while ((u & 1) == 0)
u >>= 1;
if (u == 1)
return true;
do {
while ((v & 1) == 0)
v >>= 1;
if (v == 1)
return true;
if (u > v) {
long t = v;
v = u;
u = t;
}
v -= u;
} while (v != 0);
return false;
} …Run Code Online (Sandbox Code Playgroud) 当我通过平方搜索 Exponentiation时我得到了递归方法,但后来我偶然发现了这个伪代码,我无法完全理解.
function powermod(base, exponent, modulus) {
if (base < 1 || exponent < 0 || modulus < 1)
return -1
result = 1;
while (exponent > 0) {
if ((exponent % 2) == 1) {
result = (result * base) % modulus;
}
base = (base * base) % modulus;
exponent = floor(exponent / 2);
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
如果你能用简单的术语给出一些见解,那将会有很大的帮助