18.11 Lab: Linear diophantine equations In this program, you will be solving linear Diophantine equations recursively. A linear...

50.1K

Verified Solution

Question

Programming

18.11 Lab: Linear diophantine equations

In this program, you will be solving linear Diophantineequations recursively.

A linear Diophantine equation is an equation in the form:

ax + by = c

where a, b, and c are all integers and the solutions will alsobe integers.

See the following entry in Wikipedia: Linear Diophantineequations.

You will be solving this using the recursive version of theExtended Euclidean algorithm for finding the integers x and y inBezout's identity:

ax + by = gcd(a,b)

Required Recursive Function

/* Returns true if a solution was found and false if there is no solution.  x and y will contain a solution if a solution was found.  This function will NOT output anything.*/bool diophantine(int a, int b, int c, int &x, int &y);

Basic Algorithm

  • If gcd(a,b) does not divide c, then there is no solution.

  • If b divides a (the remainder of a / b is 0), then you can justdivide by b to get the solution: x = 0, y = c / b.

  • Otherwise (b does not divide a), through a substitution method,we can come up with a simpler version of the original problem andsolve the simpler problem using recursion.

Substitution method

ax + by = c

Now, we can define a as:

a = bq + r

where q is (a / b) (using integer division) and r is theremainder (a % b).

Substituting (bq + r) in for a now:

(bq + r)x + by = c

which is the same as

b(qx + y) + rx = c

and now we have the equation in the same form, only with smallercoefficients:

bu + rv = c

with u = qx + y and v = x.

Finally, you recursively call your function on this simplerversion of the original problem. Don't forget that this recursivecall will actually solve for u and v in this case, so you stillhave to solve for x and y to get the solution to the originalproblem:

x = v y = u - qx

Linear Diophantine Example

Example showing steps of algorithm: Link

Input/Output Test Samples

Here are some examples you can test your function on:

| Input (a b c)   | Results (x y)| ------------------ | ------------| 28 7 490      | 0 70| 1024 96 2048    | -64 704| 11 11 2010     | No solution!| 1984 3070 1    | No solution!| 395 252 1     | -37 58| 25 38 2      | -6 4| 200 -2 4      | 0 -2| 25 75 100     | 4 0| 25 75 1000     | 40 0| 25 75 1      | No solution!| -10 -10 100    | 0 -10| 12 24 48      | 4 0| 5 -29 6      | 36 6

main function

Use the given main() function to test your Diophantinefunction.

int main() {  int a, b, c, x, y;  cout << \"Enter a b c\" << endl;  cin >> a >> b >> c;  cout << endl;  cout << \"Result: \";  if (diophantine(a, b, c, x, y)) {    cout << x << \" \" << y << endl;  } else {    cout << \"No solution!\" << endl;  }  return 0;}

Can anyone help please?

Answer & Explanation Solved by verified expert
4.5 Ratings (926 Votes)
Here is the code with comments include using namespace stdbool diophantineint a int b int    See Answer
Get Answers to Unlimited Questions

Join us to gain access to millions of questions and expert answers. Enjoy exclusive benefits tailored just for you!

Membership Benefits:
  • Unlimited Question Access with detailed Answers
  • Zin AI - 3 Million Words
  • 10 Dall-E 3 Images
  • 20 Plot Generations
  • Conversation with Dialogue Memory
  • No Ads, Ever!
  • Access to Our Best AI Platform: Flex AI - Your personal assistant for all your inquiries!
Become a Member

Other questions asked by students