Given two positive integers a and b, return the number of common factors of a and b.
An integer x is a common factor of a and b if x divides both a and b.
Example 1:
Input: a = 12, b = 6
Output: 4
Explanation: The common factors of 12 and 6 are 1, 2, 3, 6.
Example 2:
Input: a = 25, b = 30
Output: 2
Explanation: The common factors of 25 and 30 are 1, 5.
Constraints:
1 <= a, b <= 1000
Solutions
Solution 1: Enumeration
Thinking
Every common factor divides \(g=\gcd(a,b)\). With \(a,b\le 1000\), test each integer in \([1,g]\) against \(g\); there is no need to test \(a\) and \(b\) separately.
We can first calculate the greatest common divisor \(g\) of \(a\) and \(b\), then enumerate each number in \([1,..g]\), check whether it is a factor of \(g\), if it is, then increment the answer by one.
The time complexity is \(O(\min(a, b))\), and the space complexity is \(O(1)\).
Method 1 already scans up to \(g\). Factors come in pairs, so enumerate to \(\sqrt{g}\) and count both \(x\) and \(g/x\) (once when they coincide), in \(O(\sqrt{g})\).
Similar to Solution 1, we can first calculate the greatest common divisor \(g\) of \(a\) and \(b\), then enumerate all factors of the greatest common divisor \(g\), and accumulate the answer.
The time complexity is \(O(\sqrt{\min(a, b)})\), and the space complexity is \(O(1)\).