C Common Divisors Program

Beginner
6 min read
Updated: Oct 2026
2 programs
Live preview

What Are Common Divisors?

A positive integer d is a common divisor of a and b when it divides both numbers with remainder 0. The largest common divisor is the GCD (greatest common divisor).

Remember
d is a common divisor of a and b
  ⇔  a % d == 0  and  b % d == 0

Key fact:
  common divisors of (a, b)  =  all divisors of gcd(a, b)

Example: a = 12, b = 18
  gcd = 6
  common divisors = 1, 2, 3, 6
abCommon divisorsGCD
12181, 2, 3, 66
71311
24361, 2, 3, 4, 6, 1212

How to Find Common Divisors in C

Four clear steps — then pick a basic loop or a GCD-based list.

  1. Take absolute values of a and b (divisors are about magnitude).
  2. Reject the case where both values are 0 (no finite list).
  3. Either scan 1 … min(a, b), or compute gcd and list its divisors.
  4. Print the common divisors (and optionally the GCD).
MethodIdeaTimeBest for
Naive loopTest every i from 1 to min(a, b)O(min)Interviews, small inputs
GCD + divisorsFind g = gcd(a, b), then list divisors of gO(log min + g)Clearer math, larger inputs

Pseudocode

Pseudocode
function CommonDivisors(a, b):
    a = abs(a)
    b = abs(b)
    if a == 0 and b == 0:
        reject input

    limit = min(a, b)          // if one is 0, use the other
    if limit == 0:
        limit = max(a, b)

    for i from 1 to limit:
        if a mod i == 0 and b mod i == 0:
            print i

Cheat Sheet

Keep these facts handy while writing the program.

TopicDetail
Testa % d == 0 && b % d == 0
Upper boundScan only to min(|a|, |b|)
GCD shortcutCommon divisors = divisors of gcd(a, b)
Always included1 (unless both are 0)
Largestgcd(a, b) itself
Classic check12, 18 → 1, 2, 3, 6

Live Preview

Enter two integers to see their GCD and every common divisor.

Whole numbers (absolute values used). Tap a chip or type a pair.

Result
a = 12, b = 18
gcd(12, 18) = 6
Common divisors: 1, 2, 3, 6
Count = 4

Worked Walkthrough — a = 12, b = 18

Check every candidate from 1 through min(12, 18) = 12. Keep only values that divide both.

Calculation
i=1  → 12%1==0 and 18%1==0  → keep
i=2  → 12%2==0 and 18%2==0  → keep
i=3  → 12%3==0 and 18%3==0  → keep
i=4  → 12%4==0 but 18%4!=0  → skip
i=5  → skip
i=6  → 12%6==0 and 18%6==0  → keep
i=7..12 → skip

Common divisors: 1, 2, 3, 6
gcd = 6

C Programs

Start with the readable loop to min(a, b). Then use GCD plus a divisor scan for a faster interview answer.

Example 1 — Simple Loop

Test every integer from 1 to min(a, b) and print those that divide both.

C
#include <stdio.h>
#include <stdlib.h>

void print_common_divisors(int a, int b)
{
    int limit;
    int i;

    a = abs(a);
    b = abs(b);

    if (a == 0 && b == 0)
    {
        printf("No finite common divisors when both are 0.\n");
        return;
    }

    limit = (a < b) ? a : b;
    if (limit == 0)
    {
        limit = (a > b) ? a : b;
    }

    printf("Common divisors: ");
    for (i = 1; i <= limit; i++)
    {
        if (a % i == 0 && b % i == 0)
        {
            printf("%d ", i);
        }
    }
    printf("\n");
}

int main(void)
{
    print_common_divisors(12, 18);
    return 0;
}

How It Works

  1. Take absolute values with abs so negative inputs behave like positives.
  2. If both are 0, stop — there is no finite list of common divisors.
  3. Set limit to the smaller magnitude (or the nonzero value if one input is 0).
  4. For each i from 1 to limit, print i only when a % i == 0 and b % i == 0.
  5. For 12 and 18, the kept values are 1, 2, 3, 6.

Example 2 — GCD Method

Compute gcd(a, b), then list every divisor of that GCD.

C
#include <stdio.h>
#include <stdlib.h>

int gcd(int x, int y)
{
    x = abs(x);
    y = abs(y);

    while (y != 0)
    {
        int temp = y;
        y = x % y;
        x = temp;
    }
    return x;
}

void print_common_divisors(int a, int b)
{
    int g = gcd(a, b);
    int i;

    if (g == 0)
    {
        printf("No finite common divisors when both are 0.\n");
        return;
    }

    printf("gcd = %d\n", g);
    printf("Common divisors: ");
    for (i = 1; i <= g; i++)
    {
        if (g % i == 0)
        {
            printf("%d ", i);
        }
    }
    printf("\n");
}

int main(void)
{
    print_common_divisors(12, 18);
    return 0;
}

How It Works

  1. gcd uses the Euclidean algorithm: replace (x, y) with (y, x % y) until y is 0.
  2. For 12 and 18, that yields g = 6.
  3. Every common divisor must divide 6, so it is enough to list divisors of 6.
  4. Loop i from 1 to g and print i when g % i == 0.
  5. Result is sorted automatically: 1, 2, 3, 6.

Edge Cases & Pitfalls

Check these before calling the solution done.

Both 0

No finite list

Reject or document the case. Do not loop forever.

One 0

Use the nonzero value

Common divisors are exactly the divisors of the nonzero number.

Negatives

Take abs

Positive divisors depend on magnitude, not sign.

Coprime

Only 1

Pairs like 7 and 13 share only 1.

Time and Space Complexity

ProgramTimeExtra space
Naive loop to min(a, b)O(min(a, b))O(1)
GCD + scan 1…gO(log min + g)O(1)

g is gcd(|a|, |b|). You can tighten the second method to O(√g) with divisor pairs.

Key Takeaways

  • Definition: d divides both a and b.
  • GCD shortcut: common divisors = all divisors of gcd(a, b).
  • Two loops: naive to min, or Euclidean GCD then scan 1…g.
  • Test set: 12, 18 → 1 2 3 6; 7, 13 → 1.

One line: values that divide both numbers — or simply every divisor of their GCD.

Frequently Asked Questions

A positive integer d is a common divisor of a and b when a % d == 0 and b % d == 0. For 12 and 18, the common divisors are 1, 2, 3, and 6.
Loop from 1 to min(a, b) and print values that divide both, or compute gcd(a, b) and list the divisors of that gcd.
Every common divisor of a and b divides gcd(a, b), and every divisor of gcd(a, b) is a common divisor. So listing divisors of the gcd is enough.
Yes for any pair that is not both zero. The number 1 divides every integer.
The naive loop is O(min(a, b)). Computing gcd is O(log min), then listing its divisors is O(g) with a simple 1..g scan, or O(sqrt(g)) with the pair method.

Next: Prime Number

Check whether a number has exactly two positive divisors.

Prime number tutorial →

About the author

Mari Selvan M P
Mari Selvan M P 🔗

Developer, cloud engineer, and technical writer

  • Experience 12 years building web and cloud systems
  • Focus Full Stack Development, AWS, and Developer Education

I write practical tutorials so students and working developers can learn by doing—from databases and APIs to deployment on AWS.

9 people found this page helpful