Count of numbers upto M with GCD equals to K when paired with M (original) (raw)

Last Updated : 12 Jul, 2025

Given two integers M and K, the task is to count the number of integers between [0, M] such that GCD of that integer with M equals K.

Examples:

Input: M = 9, K = 1
Output: 6
Explanation:
The possible numbers such that when paired with 9, there GCD is 1, are 1, 2, 4, 5, 7, 8.

Input: M = 10, K = 5
Output: 1

Approach:

Below is the implementation of the above approach:

C++ `

// C++ program to Count of numbers // between 0 to M which have GCD // with M equals to K.

#include <bits/stdc++.h> using namespace std;

// Function to calculate GCD // using euler totient function int EulerTotientFunction(int limit) { int copy = limit;

// Finding the prime factors of
// limit to calculate it's
// euler totient function
vector<int> primes;

for (int i = 2; i * i <= limit; i++) {
    if (limit % i == 0) {
        while (limit % i == 0) {
            limit /= i;
        }
        primes.push_back(i);
    }
}
if (limit >= 2) {
    primes.push_back(limit);
}

// Calculating the euler totient
// function of (m/k)
int ans = copy;
for (auto it : primes) {
    ans = (ans / it) * (it - 1);
}
return ans;

}

// Function print the count of // numbers whose GCD with M // equals to K void CountGCD(int m, int k) {

if (m % k != 0) {
    // GCD of m with any integer
    // cannot  be equal to k
    cout << 0 << endl;
    return;
}

if (m == k) {
    // 0 and m itself will be
    // the only valid integers
    cout << 2 << endl;
    return;
}

// Finding the number upto which
// coefficient of k can come
int limit = m / k;

int ans = EulerTotientFunction(limit);

cout << ans << endl;

} // Driver code int main() {

int M = 9;
int K = 1;
CountGCD(M, K);

return 0;

}

Java

// Java program to Count of numbers // between 0 to M which have GCD // with M equals to K. import java.util.*;

class GFG{

// Function to calculate GCD // using euler totient function static int EulerTotientFunction(int limit) { int copy = limit;

// Finding the prime factors of
// limit to calculate it's
// euler totient function
Vector<Integer> primes = new Vector<Integer>();

for (int i = 2; i * i <= limit; i++) {
    if (limit % i == 0) {
        while (limit % i == 0) {
            limit /= i;
        }
        primes.add(i);
    }
}
if (limit >= 2) {
    primes.add(limit);
}

// Calculating the euler totient
// function of (m/k)
int ans = copy;
for (int it : primes) {
    ans = (ans / it) * (it - 1);
}
return ans;

}

// Function print the count of // numbers whose GCD with M // equals to K static void CountGCD(int m, int k) {

if (m % k != 0) {
    // GCD of m with any integer
    // cannot  be equal to k
    System.out.print(0 +"\n");
    return;
}

if (m == k) {
    // 0 and m itself will be
    // the only valid integers
    System.out.print(2 +"\n");
    return;
}

// Finding the number upto which
// coefficient of k can come
int limit = m / k;

int ans = EulerTotientFunction(limit);

System.out.print(ans +"\n");

}

// Driver code public static void main(String[] args) {

int M = 9;
int K = 1;
CountGCD(M, K);

} }

// This code is contributed by sapnasingh4991

Python3

Python3 program to Count of numbers

between 0 to M which have GCD

with M equals to K.

Function to calculate GCD

using euler totient function

def EulerTotientFunction(limit): copy = limit

# Finding the prime factors of
# limit to calculate it's
# euler totient function
primes = []

for i in range(2, limit + 1):
    if i * i > limit:
        break
    if (limit % i == 0):
        while (limit % i == 0):
            limit //= i
        primes.append(i)

if (limit >= 2):
    primes.append(limit)

# Calculating the euler totient
# function of (m//k)
ans = copy
for it in primes:
    ans = (ans // it) * (it - 1)

return ans

Function print the count of

numbers whose GCD with M

equals to K

def CountGCD(m, k):

if (m % k != 0):
    
    # GCD of m with any integer
    # cannot be equal to k
    print(0)
    return

if (m == k):
    
    # 0 and m itself will be
    # the only valid integers
    print(2)
    return

# Finding the number upto which
# coefficient of k can come
limit = m // k

ans = EulerTotientFunction(limit)

print(ans)

Driver code

if name == 'main':

M = 9
K = 1
CountGCD(M, K)

This code is contributed by mohit kumar 29

C#

// C# program to Count of numbers // between 0 to M which have GCD // with M equals to K. using System; using System.Collections.Generic;

class GFG{

// Function to calculate GCD // using euler totient function static int EulerTotientFunction(int limit) { int copy = limit;

// Finding the prime factors of
// limit to calculate it's
// euler totient function
List<int> primes = new List<int>();

for (int i = 2; i * i <= limit; i++) 
{
    if (limit % i == 0) 
    {
        while (limit % i == 0) 
        {
            limit /= i;
        }
        primes.Add(i);
    }
}
if (limit >= 2) 
{
    primes.Add(limit);
}

// Calculating the euler totient
// function of (m/k)
int ans = copy;
foreach (int it in primes) 
{
    ans = (ans / it) * (it - 1);
}
return ans;

}

// Function print the count of // numbers whose GCD with M // equals to K static void CountGCD(int m, int k) { if (m % k != 0) { // GCD of m with any integer // cannot be equal to k Console.Write(0 + "\n"); return; }

if (m == k) 
{
    // 0 and m itself will be
    // the only valid integers
    Console.Write(2 + "\n");
    return;
}

// Finding the number upto which
// coefficient of k can come
int limit = m / k;

int ans = EulerTotientFunction(limit);

Console.Write(ans + "\n");

}

// Driver code public static void Main(String[] args) { int M = 9; int K = 1; CountGCD(M, K); } }

// This code is contributed by PrinciRaj1992

JavaScript

`

Time Complexity: O((m / k)1/2 * log(m/k))

Auxiliary Space: O((m / k)1/2)