INTEGER PROC FNMathGetSquareRootI( INTEGER xI ) INTEGER squareRootI = 0 IF ( xI > 0 ) WHILE( ( squareRootI * squareRootI ) <= xI ) squareRootI = squareRootI + 1 ENDWHILE squareRootI = squareRootI - 1 ENDIF RETURN( squareRootI ) END // INTEGER PROC FNMathCheckIntegerIsPrimeB( INTEGER nI ) INTEGER I = 0 INTEGER primeB = FALSE INTEGER stopB = FALSE INTEGER restI = 0 INTEGER limitI = 0 primeB = FALSE IF ( nI <= 0 ) RETURN( FALSE ) ENDIF IF ( nI == 1 ) RETURN( FALSE ) ENDIF IF ( nI == 2 ) RETURN( TRUE ) ENDIF IF ( nI == 3 ) RETURN( TRUE ) ENDIF IF ( nI MOD 2 == 0 ) RETURN( FALSE ) ENDIF IF ( ( nI MOD 6 ) <> 1 ) AND ( ( nI MOD 6 ) <> 5 ) RETURN( FALSE ) ENDIF limitI = FNMathGetSquareRootI( nI ) I = 3 REPEAT restI = ( nI MOD I ) IF ( restI == 0 ) primeB = FALSE stopB = TRUE ENDIF IF ( I > limitI ) primeB = TRUE stopB = TRUE ENDIF I = I + 2 UNTIL ( stopB ) RETURN( primeB ) END // INTEGER PROC FNMathCheckIntegerDigitSumI( INTEGER J ) STRING s[255] = Str( J ) STRING cS[255] = "" INTEGER minI = 1 INTEGER maxI = Length( s ) INTEGER I = 0 INTEGER K = 0 FOR I = minI TO maxI cS = s[ I ] K = K + Val( cS ) ENDFOR RETURN( K ) END // INTEGER PROC FNMathCheckIntegerDigitSumIsPrimeB( INTEGER I ) INTEGER J = FNMathCheckIntegerDigitSumI( I ) INTEGER B = FNMathCheckIntegerIsPrimeB( J ) RETURN( B ) END // INTEGER PROC FNMathGetPrimeAdditiveAllToBufferB( INTEGER maxI, INTEGER bufferI ) INTEGER B = FALSE INTEGER B1 = FALSE INTEGER B2 = FALSE INTEGER B3 = FALSE INTEGER minI = 2 INTEGER I = 0 FOR I = minI TO maxI B1 = FNMathCheckIntegerIsPrimeB( I ) B2 = FNMathCheckIntegerDigitSumIsPrimeB( I ) B3 = B1 AND B2 IF ( B3 ) PushPosition() PushBlock() GotoBufferId( bufferI ) AddLine( Str( I ) ) PopBlock() PopPosition() ENDIF ENDFOR B = TRUE RETURN( B ) END // PROC Main() STRING s1[255] = "500" // change this INTEGER bufferI = 0 PushPosition() bufferI = CreateTempBuffer() PopPosition() IF ( NOT ( Ask( " = ", s1, _EDIT_HISTORY_ ) ) AND ( Length( s1 ) > 0 ) ) RETURN() ENDIF Message( FNMathGetPrimeAdditiveAllToBufferB( Val( s1 ), bufferI ) ) // gives e.g. TRUE GotoBufferId( bufferI ) END