分析:求最大公约数要知道以下问题:
-
假设有两个数a和b,其中a是不小于b的数,记a被b除的余数为r,则a = b*q + r。
-
假设a和b的一个约数为u,那么a和b都能被u整除,则a = su b = tu,s和t都是整数。
-
r = a - bq = su - (tu)q = (s - tq)u,所以r也能被u整除
-
所以a和b的任一约数同时也是r的约数(每次取余,直到余数为0)。**
public static int gcd(int p, int q) { if(q == 0) { return p; } int r = p % q; return gcd(q, r); }