求最大公约数
用辗转相除法(欧几里德算法)
static int Test(int i,int j)
{
if (i < j)
{
i = i ^ j;
j = i ^ j;
i = i ^ j;
}
int t;
while (j != 0)
{
t = i % j;
i = j;
j = t;
}
return i;
}
Stein算法(没有用到试商法,因此可以支持大素数运算)
static int FOO(int i,int j)
{
if (i == 0) return j;
if (j == 0) return i;
if ((i & 1) == 0 && (j & 1) == 0) return 2 * FOO(i >> 1, j >> 1);
else if ((i & 1) == 0) return FOO(i >> 1, j);
else if ((j & 1) == 0) return FOO(i, j >> 1);
else return FOO(Math.Abs(i - j), i < j ? i : j);
}
浙公网安备 33010602011771号