FUNCTION isPrime RETURNS LOGICAL ( i_i AS INT ): DEF VAR ii AS INT. DO ii = 2 TO SQRT( i_i ): IF i_i MODULO ii = 0 THEN RETURN FALSE. END. RETURN TRUE AND i_i > 1. END FUNCTION. /* isPrime */ FUNCTION isLeftTruncatablePrime RETURNS LOGICAL ( i_i AS INT ): DEF VAR ii AS INT. DEF VAR cc AS CHAR. DEF VAR lresult AS LOGICAL INITIAL TRUE. cc = STRING( i_i ). DO WHILE cc > "": lresult = lresult AND isPrime( INTEGER( cc ) ). cc = SUBSTRING( cc, 2 ). END. RETURN lresult. END FUNCTION. /* isLeftTruncatablePrime */ FUNCTION isRightTruncatablePrime RETURNS LOGICAL ( i_i AS INT ): DEF VAR ii AS INT. DEF VAR cc AS CHAR. DEF VAR lresult AS LOGICAL INITIAL TRUE. cc = STRING( i_i ). DO WHILE cc > "": lresult = lresult AND isPrime( INTEGER( cc ) ). cc = SUBSTRING( cc, 1, LENGTH( cc ) - 1 ). END. RETURN lresult. END FUNCTION. /* isRightTruncatablePrime */ FUNCTION getHighestTruncatablePrimes RETURNS CHARACTER ( i_imax AS INTEGER ): DEF VAR ii AS INT. DEF VAR ileft AS INT. DEF VAR iright AS INT. DO ii = i_imax TO 1 BY -1 WHILE ileft = 0 OR iright = 0: IF INDEX( STRING( ii ), "0" ) = 0 THEN DO: IF ileft = 0 AND isLeftTruncatablePrime( ii ) THEN ileft = ii. IF iright = 0 AND isRightTruncatablePrime( ii ) THEN iright = ii. END. END. RETURN SUBSTITUTE("Left: &1~nRight: &2", ileft, iright ). END FUNCTION. /* getHighestTruncatablePrimes */ MESSAGE getHighestTruncatablePrimes( 1000000 ) VIEW-AS ALERT-BOX.