Greatest common divisor: Difference between revisions
Content deleted Content added
Added solution in J. |
Ada example |
||
Line 1: | Line 1: | ||
{{task}} |
{{task}} |
||
This task requires the finding of the greatest common divisor of two integers. |
This task requires the finding of the greatest common divisor of two integers. |
||
=={{header|Ada}}== |
|||
with Ada.Text_Io; use Ada.Text_Io; |
|||
procedure Gcd_Test is |
|||
function Gcd (A, B : Integer) return Integer is |
|||
begin |
|||
if A = 0 then |
|||
return B; |
|||
end if; |
|||
if B = 0 then |
|||
return A; |
|||
end if; |
|||
if A > B then |
|||
return Gcd(B, A mod B); |
|||
else |
|||
return Gcd(A, B mod A); |
|||
end if; |
|||
end Gcd; |
|||
begin |
|||
Put_Line("GCD of 100, 5 is" & Integer'Image(Gcd(100, 5))); |
|||
Put_Line("GCD of 5, 100 is" & Integer'Image(Gcd(5, 100))); |
|||
Put_Line("GCD of 7, 23 is" & Integer'Image(Gcd(7, 23))); |
|||
end Gcd_Test; |
|||
=={{header|ALGOL 68}}== |
=={{header|ALGOL 68}}== |
||
PROC gcd = (INT a, b) INT: ( |
PROC gcd = (INT a, b) INT: ( |
Revision as of 02:55, 18 December 2007
![Task](http://static.miraheze.org/rosettacodewiki/thumb/b/ba/Rcode-button-task-crushed.png/64px-Rcode-button-task-crushed.png)
You are encouraged to solve this task according to the task description, using any language you may know.
This task requires the finding of the greatest common divisor of two integers.
Ada
with Ada.Text_Io; use Ada.Text_Io; procedure Gcd_Test is function Gcd (A, B : Integer) return Integer is begin if A = 0 then return B; end if; if B = 0 then return A; end if; if A > B then return Gcd(B, A mod B); else return Gcd(A, B mod A); end if; end Gcd; begin Put_Line("GCD of 100, 5 is" & Integer'Image(Gcd(100, 5))); Put_Line("GCD of 5, 100 is" & Integer'Image(Gcd(5, 100))); Put_Line("GCD of 7, 23 is" & Integer'Image(Gcd(7, 23))); end Gcd_Test;
ALGOL 68
PROC gcd = (INT a, b) INT: ( IF a = 0 THEN b ELIF b = 0 THEN a ELIF a > b THEN gcd(b, a MOD b) ELSE gcd(a, b MOD a) FI ); main : ( INT a = 33, b = 77; printf(($x"The gcd of"g" and "g" is "gl$,a,b,gcd(a,b))); INT c = 49865, d = 69811; printf(($x"The gcd of"g" and "g" is "gl$,c,d,gcd(c,d))) )
The output is:
The gcd of +33 and +77 is +11 The gcd of +49865 and +69811 is +9973
Forth
: gcd ( a b -- n ) begin dup while tuck mod repeat drop ;
J
x+.y
Java
Iterative
public static long gcd(long a, long b){ long factor= 0; factor= Math.max(a, b); for(long loop= factor;loop > 1;loop--){ if(a % loop == 0 && b % loop == 0){ return loop; } } return 1; }
Recursive
public static long gcd(long a, long b){ if(a == 0) return b; if(b == 0) return a; if(a > b) return gcd(b, a % b); return gcd(a, b % a); }