| a 98[97]-step program for an hp21s pocket calculator |
Using double-precision arithmetic, [m].[n] designates m@10+n@0 --
also written as concatenated decimal, "m,n" (zeros un-suppressed) --
and similarly [[21-digits]] means [upper-11-digits].[lower-10-digits] --
j:k denotes separate sequential process parts chained (all carries kept) --
| STO 1,2 | 'modulator' [5@10].[@10] maximum |
| STO 5,6 | 'root' [5@10].[@10] maximum; [0].[5@10] works |
| STO 7,8 | 'result' [0].[1] initially |
| 'X' | 'exponent' [2@11] maximum: chains (binary) low-order first |
| XEQ D | 'exponentiate' |
| XEQ C | 'multiply' |
| XEQ A | 'adjust' |
| also 9,4 | 'multiplier' [10@10].[@10] maximum; [0].[9@10] works |
| also root | = 'multiplicand' |
| also 3,0 | 'product' |
LBL D IP X=0? RTN ÷ 2 INPUT FRAC X=0? GTO 6 RCL 8 STO 4 RCL 7 STO 9 XEQ C RCL 0 STO 8 RCL 3 STO 7 -------- LBL 6 RCL 6 STO 4 RCL 5 STO 9 XEQ C |
RCL 0 STO 6 RCL 3 STO 5 SWAP GTO D -------- LBL B RCL 9 X=0? RTN XEQ A 1 0 STO × 0 STO × 3 STO × 4 STO × 9 RCL 9 IP STO - 9 × ( × RCL 6 ) |
STO + 0 RCL 5 = STO + 3 GTO B -------- LBL C 0 STO 0 STO 3 E 1 1 +/- STO + 4 STO × 9 STO × 4 XEQ B RCL 4 STO 9 XEQ B RCL 6 STO - 0 RCL 5 STO - 3 1 |
0 STO ÷ 3 STO ÷ 0 -------- LBL A RCL 3 ÷ RCL 1 = IP × ( × RCL 2 ) STO - 0 RCL 1 = STO - 3 RCL 0 IP STO - 0 STO + 3 RTN -------- SHOW d96C |
Example: Find a prime (qualifying a prime-suspect: not a final proof of primality)
| STO 1,2 | 'prime-suspect' [5@10].[@10] maximum |
| STO 7,8 | 'result' [0].[1] initially |
| STO 5,6 | 'chain-link' =2^33~35 [[2^37]] maximum;
[0].[2^35] works
(estimating '1+2'/'5+6' for major remainder-fraction>0.5) |
| STO 9,4 | 'integer-part' =[IP['1+2'/'5+6']]; [0].[9@10] works |
| XEQ C | 'multiply' |
| STO 5,6 | 'result' [0].[2] trially, or other |
| - or m- | '-3-0' or '1-3'+'2-0' positive 'product' modulo 'modulator' |
| ÷ RCL 8 | (or ×10^10) integer form |
| XEQ D | 'exponentiate' (about 6 minutes) |
| RCL 1+2 | estimate of 'prime-suspect' |
| ÷ | .[2^same 33~35] |
| IP | 'integer-part' of 'prime-suspect'/2^same 33~35 |
| XEQ D | 'exponentiate' (continue, about 6 minutes) |
| RCL 7,8 | Check 'result' for original 5,6 trial (congruent) |
Sample values:
P = 4,9567823169,6710863373 =(33bit)= 5,7704540865:0,4969761293 (chain pair)
P = 4,9658723516,8246629391 =(34bit)= 2,8905181398:1,0816390159 (chain pair)
P = 4,8653265932,1434373841 =(35bit)= 1,4159964028:1,9062947537 (chain pair)
P*Q = 0,9999999999,9999999988,6922049508,2506023793
P = 1,3210304190,5569697827 =(33bit)= 1,5378818137:0,6476402723
Q = 0,7569848396,9417076059 =(34bit)= 0,4406231686:0,9541311835
KEY97 = 0,7134209118:4928465501 = 0,6128238969,4198475357
/97 mod ØP ≡ 0,7081812555,7624992649
/97 mod ØQ ≡ 0,2029031529,0771587397
/Q ≡ 1,0938094288,6891802521
/P ≡ 0,1302035459,2185788965
Ø is the totient function, Ø(P*Q^n) = (P-1)*(Q-1)*Q^(n-1)
@ delimits the radix-10 characteristic (base ten exponent), 2@3 = 2*10^3 = 2000
[A similar program should be writable for an RPN calculator; the hp21s was at hand]
A premise discovery under the title,