Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
107
Task/Additive-primes/TSE-SAL/additive-primes.tse
Normal file
107
Task/Additive-primes/TSE-SAL/additive-primes.tse
Normal file
|
|
@ -0,0 +1,107 @@
|
|||
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
|
||||
Loading…
Add table
Add a link
Reference in a new issue