VOOZH about

URL: https://www.geeksforgeeks.org/dsa/count-number-pairs-n-b-n-gcd-b-b/

⇱ Count number of pairs (A <= N, B <= N) such that gcd (A , B) is B - GeeksforGeeks


  • Courses
  • Tutorials
  • Interview Prep

Count number of pairs (A <= N, B <= N) such that gcd (A , B) is B

Last Updated : 12 Feb, 2025

Given a number n, we need to find the number of ordered pairs of a and b such gcd(a, b) is b itself
Examples :

Input : n = 2
Output : 3
The pairs are (1, 1) (2, 2) and (2, 1)

Input : n = 3
Output : 5
(1, 1) (2, 2) (3, 3) (2, 1) and (3, 1)

[Naive Approach] Counting GCD Pairs by Divisor Property

gcd(a, b) = b means b is a factor of a. So the total number of pairs will be equal to sum of divisors for each a = 1 to n.

Please refer find all divisors of a natural number for implementation.

[Expected Approach] Counting GCD Pairs Using Divisor Multiples and Optimized Summation

gcd(a, b) = b means that a is a multiple of b. So the total number of pairs will be sum of number of multiples of each b (where b varies from 1 to n) which are less than or equal to n. 

For a number i, a number of multiples of i is less than or equal to floor(n/i). So what we need to do is just sum the floor(n/i) for each i = 1 to n and print it. But more optimizations can be done. floor(n/i) can have atmost 2*sqrt(n) values for i >= sqrt(n). floor(n/i) can vary from 1 to sqrt(n) and similarly for i = 1 to sqrt(n) floor(n/i) can have values from 1 to sqrt(n). So total of 2*sqrt(n) distinct values .

let floor(n/i) = k
k <= n/i < k + 1
n/k+1 < i <= n/k
floor(n/k+1) < i <= floor(n/k)
Thus for given k the largest value of i for
which the floor(n/i) = k is floor(n/k)
and all the set of i for which the
floor(n/i) = k are consecutive


Output
1
3
5

Time complexity: O(n). This is because the while loop takes O(n) time to complete since it is looping over all elements of the array. 
Auxiliary space: O(1), as no extra space is used.


Comment
Article Tags: