GCD

From APL Wiki
Jump to navigation Jump to search

GCD () is a dyadic scalar function which returns the Greatest Common Divisor of two integer arguments. It is an extension of Or which maintains the same results on Boolean arguments and the same identity element 0, in the same way that LCM extends And.

Examples

For positive integer arguments, the GCD is the largest positive number which divides both numbers. If one of the arguments is zero, the GCD function returns the other number.

      ∘. 0,⍳10
 0 1 2 3 4 5 6 7 8 9 10
 1 1 1 1 1 1 1 1 1 1  1
 2 1 2 1 2 1 2 1 2 1  2
 3 1 1 3 1 1 3 1 1 3  1
 4 1 2 1 4 1 2 1 4 1  2
 5 1 1 1 1 5 1 1 1 1  5
 6 1 2 3 2 1 6 1 2 3  2
 7 1 1 1 1 1 1 7 1 1  1
 8 1 2 1 4 1 2 1 8 1  2
 9 1 1 3 1 1 3 1 1 9  1
10 1 2 1 2 5 2 1 2 1 10
Works in: Dyalog APL

While the mathematical definition of GCD does not cover non-integers, some implementations accept them as arguments. In this case, the return value of RXY is chosen so that both X÷R and Y÷R are integers (or Gaussian integers, when X and/or Y are complex numbers).

      0.613÷3
0.06666666667
      0.6(13÷3)÷0.613÷3
9 65
      2J23J1
1J1
      2J2 3J1÷1J1
2 2J¯1
Works in: Dyalog APL

Description

If both arguments are integers, the GCD is the greatest positive integer which divides both numbers evenly, or 0 if both arguments are 0. That is, each argument is an integer multiple of the GCD of both arguments. Under this definition, any number is considered a divisor of 0, because multiplying it by 0 results in 0. Using Residue, we might also write the divisibility criterion as 0 0(ab)|a,b.

Because 1 divides every integer, there is always some common divisor of any pair of arguments, and the GCD is well-defined. The identity element for GCD is 0 on the domain of non-negative real numbers, because the other argument will always be a divisor of 0, and so it is returned as the result (for an arbitrary real number, the result is its absolute value). Because 1 is the only positive divisor of itself, the GCD of 1 and any other number is 1.

History

The use of GCD as an extension of Or, and its extension to complex rational numbers, was proposed by Eugene McDonnell at APL75.[1] This definition has become common among many APLs, with SHARP APL, Dyalog APL (as of version 11.0), J, NARS2000, GNU APL, ngn/apl, and dzaima/APL adopting it. However, some APLs, such as APL2 and APLX, keep Or as a pure boolean function and do not extend it, while K uses the Maximum function as Or.

External links

Documentation

References

APL built-ins [edit]
Primitive functions
Scalar
Monadic ConjugateNegateSignumReciprocalMagnitudeExponentialNatural LogarithmFloorCeilingFactorialNotPi TimesImaginaryRollType
Dyadic AddSubtractTimesDivideResiduePower (function)LogarithmMinimumMaximumBinomialComparison functionsBoolean functions (And, Or, Nand, Nor) ∙ GCDLCMCircularComplex
Non-Scalar
Structural ShapeReshapeTallyDepthRavelEnlistTableCatenateReverseRotateTransposeRazeMixSplitEncloseNestCut (K)PairPartitioned EnclosePartition
Selection FirstPickTakeDropUniqueIdentitySelectReplicateExpandSet functions (IntersectionUnionWithout) ∙ Bracket indexSquad Indexing
Selector Index generatorGradeIndex OfInterval IndexIndicesDeal
Computational MatchNot MatchMembershipFindNub SieveEncodeDecodeMatrix InverseMatrix DivideFormatExecuteMaterialise
Primitive operators Monadic EachCommuteConstantReplicateReduceWindowed ReduceScanOuter ProductKeyI-beamSpawnFunction axis
Dyadic Inner ProductPower (operator)Rank (operator)BindBesideReverse ComposeAtopOverAtVariantStencil
Quad names
Arrays Index originMigration level
Functions
Operators