Java:获得最大公约数,哪种方法更好?

从这个问题Java:得到最大的公约数

获取任何数据类型的gcd是intlongIntegerLong ,哪个答案在精度,速度,cpu使用等方面更好?

A:

 private static int gcdThing(int a, int b) { BigInteger gcd = BigInteger.valueOf(a).gcd(BigInteger.valueOf((b))); return gcd.intValue(); } 

B:

 public int GCD(int a, int b) { return b==0 ? a : GCD(b, a%b); } 

  Random r = new Random(); int[] ints = new int[500000]; for (int i = 0 ; i < ints.length ; i++) ints[i] = r.nextInt(); for (int i = 0 ; i < ints.length-1; i++) GCD(i,i+1); for (int i = 0 ; i < ints.length-1; i++) gcdThing(i, i + 1); long start = System.currentTimeMillis(); for (int i = 0 ; i < ints.length-1; i++) GCD(i,i+1); System.out.println("GCD: " + (System.currentTimeMillis() - start)); start = System.currentTimeMillis(); for (int i = 0 ; i < ints.length-1; i++) gcdThing(i, i + 1); System.out.println("gcdThing: " + (System.currentTimeMillis() - start)); 

打印:

GCD:13

gcdThing:124