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

65 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!

### 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!