# Calculating the Greatest Common Divisor for two positive integers (simple)

54 views (last 30 days)

Show older comments

Hi,

I am very new to Matlab so please excuse my obvious questions. I am trying to construct a simple function that takes two integers as input and returns the GCD. I have used the following functions:

function [A, B] = getData(x,y) %function to get data from the user

x = input('Enter x');

y = input ('Enter y');

A = x;

B = y;

end

function [M, N] = adjust(A, B) %sort the values. N is the bigger value, M is the smaller one

if (A < B)

M = A;

N = B;

end

end

function [GCD] = GCD(M, N) %function to calculate the Greatest Common Divisor

while(true)

R = mod(N, M);

if (R > 0)

N = M;

M = R;

end

if (R == 0)

GCD = M;

end

end

end

function [result] = printData(GCD) %function to print the result

result = GCD;

display(result);

end

I now want to call these functions so that when I open the script, it takes two inputs from me and displays the GCD. But I am stuck on this part. Please guide me on how to compile this jumble of code properly. Thank you!

##### 2 Comments

Jan
on 12 Aug 2017

Edited: Jan
on 12 Aug 2017

The question is not simple. It is not clear, what you want to achieve with the function. Then modifying the code is much harder then rewriting it completely. E.g. the adjust function can be solved easier using min and max. Take a look into the code of gcd:

type gcd

Is this a homework? Then posting a running solution will be avoided to give you a chance to submit your solution.

### Answers (5)

MSP
on 12 Aug 2017

This is how u call the function.Calling getData and printData is useless.

A= input('Enter x')

B= input ('Enter y')

[M,N]=adjust(A,B);

[gcd]=GCD_new(M,N)

And you have some problems in your functions.Check the modifications

function [M, N] = adjust(A, B) %sort the values. N is the bigger value, M is the smaller one

if (A < B)

M = A;

N = B;

else

M=B

N=A

end

end

The logic on your GCD doesn't seem right.Make sure to save the functions in the same folder or directory.

function [GCD] = GCD_new(M,N)

R = mod(N, M)

if (R==0)

GCD=M;

else

R = mod(N,M);

N = M;

M = R;

GCD=M;

end

end

And even easier,

type "help GCD in command window,does it all for you"

Jan
on 12 Aug 2017

You need a main function to call the functions:

function main

[A, B] = getData;

G = GCD(A, B); % Do not call the output like the function

printData(G)

end

Now simplify your functions: getData does not get inputs, if you overwrite them immediately. Create A and B directly and omit x and y.

The output printGCD should not return anything. disp(G) is enough.

The sorting is easier by min(A,B) and max(A,B).

The main problem remains your GCD function: It does not work. It is not correct mathematically yet. Take a look at the algorithm again. And currently you have an infinite loop. When do you want to exit it?

Beside Matlab's gcd command, you find the algorithm at WikiPedia also.

##### 0 Comments

Musaddiq Sajjad
on 12 Aug 2017

##### 3 Comments

Abdulrehman Samiullah
on 12 Aug 2017

Edited: Abdulrehman Samiullah
on 12 Aug 2017

Can we write all these functions in one .m file??

Mai Aljneibi
on 30 Nov 2018

##### 0 Comments

### See Also

### Categories

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!