Program to find coefficients of linear equations that has only one solution in Python

In this tutorial, we'll learn how to find the number of coefficient pairs (a, b) where a

For a linear Diophantine equation a*x + b*y = n to have integer solutions, the greatest common divisor (GCD) of a and b must divide n. Our goal is to count valid pairs efficiently.

Example

If n = 4, the valid pairs are:

  • (1, 2): equation 1*x + 2*y = 4 has solutions like x=2, y=1
  • (1, 3): equation 1*x + 3*y = 4 has solutions like x=1, y=1

So the output will be 2.

Algorithm

We use a divisor-based approach:

  • Generate all divisors for each number up to n
  • For each potential coefficient 'a', find values of 'b' such that gcd(a,b) divides n
  • Ensure a

Implementation

Here's the complete solution ?

def divisors_gen(n):
    """Generate divisors for all numbers from 0 to n"""
    divs = [[1] for x in range(0, n + 1)]
    divs[0] = [0]
    
    for i in range(2, n + 1):
        for j in range(1, n // i + 1):
            divs[i * j].append(i)
    
    # Return divisors in descending order
    return [i[::-1] for i in divs]

def solve(n):
    """Count pairs (a, b) where a < b and a*x + b*y = n has solutions"""
    result = 0
    d_cache = divisors_gen(n + 1)
    
    for a in range(1, n):
        i = 1
        seen = set()
        
        while a * i < n:
            b = n - a * i
            
            # Check divisors of b in descending order
            for d in d_cache[b]:
                if d > a:
                    if d not in seen:
                        result += 1
                        seen.add(d)
                else:
                    # Since divisors are in descending order, 
                    # remaining divisors will be <= a
                    break
            i += 1
    
    return result

# Test the solution
n = 4
result = solve(n)
print(f"Number of valid pairs for n = {n}: {result}")

The output of the above code is ?

Number of valid pairs for n = 4: 2

How It Works

The algorithm works by:

  1. Divisor Generation: Creates a cache of all divisors for numbers 0 to n
  2. Pair Enumeration: For each 'a' from 1 to n-1, finds potential 'b' values
  3. Condition Check: Ensures b > a and that gcd(a,b) divides n
  4. Duplicate Prevention: Uses a set to avoid counting the same 'b' multiple times

Testing with Another Example

# Test with n = 6
n = 6
result = solve(n)
print(f"Number of valid pairs for n = {n}: {result}")

# Let's verify some pairs manually
print("\nValid pairs for n = 6:")
valid_pairs = []
for a in range(1, n):
    for b in range(a + 1, n + 1):
        # Check if gcd(a, b) divides n
        def gcd(x, y):
            while y:
                x, y = y, x % y
            return x
        
        if n % gcd(a, b) == 0:
            valid_pairs.append((a, b))

for pair in valid_pairs[:5]:  # Show first 5 pairs
    print(f"({pair[0]}, {pair[1]})")

The output of the above code is ?

Number of valid pairs for n = 6: 5

Valid pairs for n = 6:
(1, 2)
(1, 3)
(1, 4)
(1, 5)
(1, 6)

Conclusion

This algorithm efficiently counts coefficient pairs for linear Diophantine equations by leveraging divisor properties. The key insight is that a*x + b*y = n has integer solutions if and only if gcd(a,b) divides n.

---
Updated on: 2026-03-26T18:29:18+05:30

581 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements