Find largest left truncatable prime in a given base: Difference between revisions

Added BBC BASIC
(Added Java implementation)
(Added BBC BASIC)
Line 12:
Related Tasks:
* [[Miller-Rabin primality test]]
 
=={{header|BBC BASIC}}==
{{works with|BBC BASIC for Windows}}
Uses the '''H'''uge '''I'''nteger '''M'''ath & '''E'''ncryption library from http://devotechs.com/
<lang bbcbasic> HIMEM = PAGE + 3000000
INSTALL @lib$+"HIMELIB"
PROC_himeinit("HIMEkey")
DIM old$(20000), new$(20000)
h1% = 1 : h2% = 2 : h3% = 3 : h4% = 4
FOR base% = 3 TO 17
PRINT "Base "; base% " : " FN_largest_left_truncated_prime(base%)
NEXT
END
DEF FN_largest_left_truncated_prime(base%)
LOCAL digit%, i%, new%, old%, prime%, fast%, slow%
fast% = 1 : slow% = 50
old$() = ""
PROC_hiputdec(1, STR$(base%))
PROC_hiputdec(2, "1")
REPEAT
new% = 0 : new$() = ""
PROC_hiputdec(3, "0")
FOR digit% = 1 TO base%-1
SYS `hi_Add`, ^h2%, ^h3%, ^h3%
FOR i% = 0 TO old%-1
PROC_hiputdec(4, old$(i%))
SYS `hi_Add`, ^h3%, ^h4%, ^h4%
IF old% OR digit% > 1 THEN
IF old% > 100 THEN
SYS `hi_IsPrime_RB`, ^fast%, ^h4% TO prime%
ELSE
SYS `hi_IsPrime_RB`, ^slow%, ^h4% TO prime%
ENDIF
IF prime% THEN new$(new%) = FN_higetdec(4) : new% += 1
ENDIF
NEXT
NEXT
SYS `hi_Mul`, ^h1%, ^h2%, ^h2%
SWAP old$(), new$()
SWAP old%, new%
UNTIL old% = 0
= new$(new%-1)</lang>
'''Output:'''
<pre>
Base 3 : 23
Base 4 : 4091
Base 5 : 7817
Base 6 : 4836525320399
Base 7 : 817337
Base 8 : 14005650767869
Base 9 : 1676456897
Base 10 : 357686312646216567629137
Base 11 : 2276005673
Base 12 : 13092430647736190817303130065827539
Base 13 : 812751503
Base 14 : 615419590422100474355767356763
Base 15 : 34068645705927662447286191
Base 16 : 1088303707153521644968345559987
Base 17 : 13563641583101
</pre>
 
=={{header|C}}==