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

Suppose we have a value n, we have to find the number of pairs (a, b) [a < b], that exist such that the equation a*x + b*y = n, has at least one solution.

So, if the input is like n = 4, then the output will be 2 because the valid pairs are (1, 2) and (1, 3).

To solve this, we will follow these steps −

• Define a function divisors_gen() . This will take n
• divs := a list of lists of size n+1. And each inner list is holding 1
• divs := a list with only one element 0
• for i in range 2 to n, do
• for j in range 1 to floor of (n / i) + 1, do
• insert i at the end of list at index [i * j]
• return divs but reverse all internal lists
• From the main method, do the following −
• result := 0
• d_cache := divisors_gen(n+1)
• for a in range 1 to n - 1, do
• i := 1
• s := a new set
• while a*i < n, do
• b := n - a*i
• for each d in d_cache[b], do
• if d > a, then
• if d not in s, then
• result := result + 1
• otherwise,
• come out from the loop
• insert d into the set s
• i := i + 1
• return result

## Example

Let us see the following implementation to get better understanding −

def divisors_gen(n):
divs = [ for x in range(0, n + 1)]
divs = 
for i in range(2, n + 1):
for j in range(1, n // i + 1):
divs[i * j].append(i)
return [i[::-1] for i in divs]

def solve(n):
result = 0
d_cache = divisors_gen(n+1)

for a in range(1, n):
i = 1
s = set([])
while a*i < n:
b = n - a*i
for d in d_cache[b]:
if d > a:
if d not in s:
result += 1
else:
break
i += 1
return result

n = 4
print(solve(n))

## Input

4


## Output

2

Updated on: 25-Oct-2021

301 Views 