Python 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 Python

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

  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 math.gcd and list its divisors.
  4. Collect and 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

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 and b % d == 0
Upper boundScan only to min(|a|, |b|)
GCD shortcutCommon divisors = divisors of math.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

Python Programs

Start with the readable loop to min(a, b). Then use math.gcd plus a divisor scan for the cleaner math path.

Example 1 — Simple Loop

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

python
def common_divisors_naive(a: int, b: int) -> list[int]:
    a, b = abs(a), abs(b)

    if a == 0 and b == 0:
        return []

    limit = min(a, b)
    if limit == 0:
        limit = max(a, b)

    return [i for i in range(1, limit + 1) if a % i == 0 and b % i == 0]


a, b = 24, 36
result = common_divisors_naive(a, b)
print(f"Common divisors of {a} and {b} are: {', '.join(map(str, result))}")

How It Works

  1. Take absolute values so negative inputs behave like positives.
  2. If both are 0, return an empty list — there is no finite set of common divisors.
  3. Set limit to the smaller magnitude (or the nonzero value if one input is 0).
  4. Keep every i from 1 to limit only when both remainders are 0.
  5. For 24 and 36, the kept values are 1, 2, 3, 4, 6, 12.

Example 2 — GCD Method

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

python
import math


def common_divisors_via_gcd(a: int, b: int) -> list[int]:
    a, b = abs(a), abs(b)

    if a == 0 and b == 0:
        return []

    g = math.gcd(a, b)
    return [i for i in range(1, g + 1) if g % i == 0]


a, b = -12, 18
result = common_divisors_via_gcd(a, b)
print(f"Common divisors of {a} and {b} are: {', '.join(map(str, result))}")

How It Works

  1. math.gcd uses the Euclidean algorithm under the hood.
  2. For 12 and 18, that yields g = 6 (signs handled via abs).
  3. Every common divisor must divide 6, so it is enough to list divisors of g.
  4. Loop i from 1 to g and keep values where 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 return empty. 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) beyond the answer list
GCD + scan 1…gO(log min + g)O(1) beyond the answer list

g is gcd(|a|, |b|). For larger GCDs, walk only to √g and collect factor pairs.

Key Takeaways

  • Definition: d divides both a and b.
  • GCD shortcut: common divisors = all divisors of math.gcd(a, b).
  • Two loops: naive to min, or scan 1…g after GCD.
  • 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 collect values that divide both, or compute math.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 factor pairs.

Next: Composite Number

Check whether a number has more than two positive divisors.

Composite 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.

10 people found this page helpful