# TITLE: Find Leading or Trailing Digits of Triangular Numbers # AUTHOR: BazzaB # EMAIL: barries_ecdl@hotmail.com # DATE: 1st November 2003 # MAKE: Casio # MODEL: CFX-9850G or similar # NOTES: Follow the on-screen prompts. # All of this is a compromise between speed and program size. # For Trailing Digits, say you wanted an 8-digit Triangular number # and choose to test the last 3. The prompt will say FROM 000 TO 996. # If you want 005 it's only necessary to enter 5. # Depending on what you want, it can take from 10 seconds # up to 4 minutes to get the answer. Please be patient. # DISPLAY: Triangular N = half * ( N squared + N ). # On the right of the screen you will see the value of N # that generated the Triangular N on the left. # KEYS: # * multiply by below [ DEL ] # -> assignment above [ AC/ON] # => if-then shift vars f3 f3 # <> not equal shift vars f6 f3 f2 # >= greater or equal shift vars f6 f3 f5 # <= less or equal shift vars f6 f3 f6 # ^2 squared use [ x squared ] key # sqrt square root shift [ x squared ] key # \^-1 reciprocal shift [ ) ] key # \10^ ten to the power small 10. shift [ log ] # { left brace shift [ * ] # [ left bracket shift [ + ] # ] right bracket shift [ - ] #__________________________________________________ ## Program "TRIANG" # This program listing is repeated below without comments # for compatibility with Xchange. Lbl A Norm:ClrText:ClrList:0->A~Z:1->Y Locate 5,1,"-TRIANGULARS-" Locate 2,3,"F1 = LEADING DIGITS" Locate 2,4,"F2 = TRAILING DIGITS" Locate 4,6,"PRESS F1 OR F2" While (M<>69)(M<>79:Getkey->M:WhileEnd:M=69->M Lbl B ClrText:Locate 6,2,"-LEADING-":M=>Locate 6,2,"-TRAILING-" Locate 1,4,"HOW MANY DIGITS ARE" Locate 1,5,"IN THE WHOLE NUMBER." Locate 5,7,"FROM 3 TO 10" "D="?->D:Frac D+(D<3)+(D>10=>Goto B Lbl C ClrText:Locate 2,3,"HOW MANY LEADING" M=>Locate 11,3,"TRAILING" Locate 2,4,"DIGITS DO YOU WANT." Locate 5,6,"FROM 1 TO":Locate 15,6,D-1 "G="?->G:Frac G+(G<1)+(G>(D-1=>Goto C (1-M)\10^(G-1->J:\10^G-1->K:M=>K-1-2(G>1->K Lbl D ClrText:Locate 2,3,"WHAT IS THE" Locate 14,3,G:Locate 16,3,"DIGIT" Locate 3,4,"LEAD":M=>Locate 2,4,"TRAIL" Locate 7,4,"ING NUMBER.":Locate 4,6,"FROM" Locate 9,6,\10^(G-1:M=>Locate 9,6,0 Locate 6,7,"TO":Locate 9,7,K "C="?->C:Frac C+(CK=>Goto D ClrText:M=0=>Goto M ; go to Leading Digits routine 10Frac .1C->K ; get last 1 digit of input C (K=2)+(K=4)+(K=7)+(K=9=>Goto K ; no endings for these G=1=>Goto E ; a nightmare problem, so leave until later 100Frac .01C->K ; get last 2 digits of input C If D<5 Then 14+29(D=4->S ; for D=3 and G=2, or D=4 and G=3 or 2, 43+55(D=4->F ; put all possible 2-digit endings into a list F-S+1->P:Seq(0,Z,1,P,1->List 1 ; and search it For S->Z To F:100Frac (200\^-1(Z^2+Z->List 1[Z-S+1:Next 0->R:For 1->Z To P:(K=List 1[Z])+R->R:Next R=0=>Goto K:Goto E IfEnd {13,23,33,43,63,73,83,93,8,18,38,48,58,68,88,98->List 1 0->R ; for D=5 thru 10, and G=2 thru 9, put impossible For 1->Z to 16 ; 2-digit endings into a List and compare (K=List 1[Z])+R->R ; with the last 2 digits of input C. Next:R=>Goto K Lbl E 1000->J:JFrac J\^-1C->K:(2J)\^-1->E If (D<8)+(G<3)+(C<99 Then \10^(2-(C<9->K:K->J:(2J)\^-1->E:KFrac 2EC->K IfEnd 'TRAILING DIGITS ClrText:ClrList:{0,0,0,0,0->List 1 ; the nightmare C>9=>Goto F:"WAIT":0->R # Table of impossible 1-digit endings # with preceding zeroes for D=3 thru 10. ((C=1)(D=3)(G>1))+(((C=0)+(C=6))(D=4)(G>1))+R->R ((C<2)(D=5)(G>2))+((C>2)(D=5)(G>3))+R->R (((C=1)+(C>4))(D=6)(G>2))+((C=0)(D=6)(G>3))+R->R ((C=3)(D=6)(G>4))+((C<>3)(D=7)(G>3))+R->R ((C=3)(D=7)(G>4))+((C<>3)(D=8)(G>4))+R->R ((C=3)(D=8)(G>5))+((C<2)(D=9)(G>4))+R->R ((C>2)(D=9)(G>5))+((C=6)(D=10)(G>4))+R->R (((C<>3)(C<>6))(D=10)(G>5))+((C=3)(D=10)(G>6))+R->R R=>Goto K:(D<8)+(G<3=>Goto F \10^G->J:Int (sqrt(2(\10^D-J+C)+.25)-.5->F C=0=>{624,751,624,1,2000(5D-38->List 1 C=1=>{1747,125,3,125,4126+10000(D-8)^2->List 1 C=3=>{245,75,5,75,14077+30400(D-9->List 1 C=5=>{1571,125,179,125,20000D-155786->List 1 C=6=>{1257,368,7,368,4371+10000(D-8)^2->List 1 (D=10)(C=0=>{751,624,1,624,44624->List 1 (D=9)(C=5=>{125,1571,125,179,14089->List 1 (D=9)(C=6=>{368,1257,368,7,14003->List 1 (D=8)(C=3=>{75,245,75,5,4402->List 1 List 1[5->N:Goto I Lbl F ClrText:"COUNTDOWN TO ZERO...":1->R Int (sqrt(2\10^(D-1)-3.75)-.5->N:N->Z JFrac (E(N^2+N))=K=>Goto H Lbl G Dsz N:JFrac (E(N^2+N))<>K=>Goto G:N->Z Lbl H Isz N:JFrac (E(N^2+N))<>K=>Goto H Isz X:X=1=>N->W:X=2=>N->V:X=3=>N->U:X=4=>N->P Locate 2X,X+3,4-X:X<4=>Goto H For 1->X To 399:Next W-Z->List 1[1:V-W->List 1[2:U-V->List 1[3:P-U->List 1[4 \10^G->J:Int (sqrt(2(\10^D-J+C)+.25)-.5->F:Z->N:ClrText Lbl I For 1->X To 4:N+List 1[X->N:N>F=>Goto J .5(N^2+N->T:JFrac TJ\^-1<>C=>Goto J Locate 1,Y,T:Locate 16,Y,N:0->R:Isz Y If Y>6:Then Locate 5,7,"PRESS 'EXE'" While Getkey<>31:WhileEnd:ClrText:1->Y IfEnd Lbl J Next:N<=F=>Goto I:R=0=>Goto L Lbl K ClrText:"NONE ENDING WITH" If C=0:Then Locate 1,3,\10^(G-1:Locate 1,3,0:IfEnd If C:Then G-Int log C->J:Locate J,3,C If J>1:Then For 1->K To J-1:Locate K,3,0:Next:IfEnd IfEnd Lbl L Locate 3,7,"END...PRESS 'EXE'" While Getkey<>31:WhileEnd:Goto A ' Lbl M 'LEADING DIGITS ; All simple programming 1->R:\10^(D-G->P ; and self-contained. Int (sqrt(2CP+.5->S:Int (sqrt(2(C+1)P-3.75)-.5->F If F>=S:Then .5(S^2+S->K:.5(S^2-S->T If KT:Isz S IfEnd For S->N To F:N+T->T:Locate 1,Y,T:Locate 16,Y,N 0->R:Isz Y If Y>6:Then Locate 5,7,"PRESS 'EXE'" While Getkey<>31:WhileEnd:ClrText:1->Y IfEnd Next IfEnd If R:Then "NONE LEADING WITH":Locate 1,3,C IfEnd:Goto L #__________________________________________________ @@ Program "TRIANG" Lbl A Norm:ClrText:ClrList:0->A~Z:1->Y Locate 5,1,"-TRIANGULARS-" Locate 2,3,"F1 = LEADING DIGITS" Locate 2,4,"F2 = TRAILING DIGITS" Locate 4,6,"PRESS F1 OR F2" While (M<>69)(M<>79:Getkey->M:WhileEnd:M=69->M Lbl B ClrText:Locate 6,2,"-LEADING-":M=>Locate 6,2,"-TRAILING-" Locate 1,4,"HOW MANY DIGITS ARE" Locate 1,5,"IN THE WHOLE NUMBER." Locate 5,7,"FROM 3 TO 10" "D="?->D:Frac D+(D<3)+(D>10=>Goto B Lbl C ClrText:Locate 2,3,"HOW MANY LEADING" M=>Locate 11,3,"TRAILING" Locate 2,4,"DIGITS DO YOU WANT." Locate 5,6,"FROM 1 TO":Locate 15,6,D-1 "G="?->G:Frac G+(G<1)+(G>(D-1=>Goto C (1-M)\10^(G-1->J:\10^G-1->K:M=>K-1-2(G>1->K Lbl D ClrText:Locate 2,3,"WHAT IS THE" Locate 14,3,G:Locate 16,3,"DIGIT" Locate 3,4,"LEAD":M=>Locate 2,4,"TRAIL" Locate 7,4,"ING NUMBER.":Locate 4,6,"FROM" Locate 9,6,\10^(G-1:M=>Locate 9,6,0 Locate 6,7,"TO":Locate 9,7,K "C="?->C:Frac C+(CK=>Goto D ClrText:M=0=>Goto M 10Frac .1C->K (K=2)+(K=4)+(K=7)+(K=9=>Goto K G=1=>Goto E 100Frac .01C->K If D<5 Then 14+29(D=4->S 43+55(D=4->F F-S+1->P:Seq(0,Z,1,P,1->List 1 For S->Z To F:100Frac (200\^-1(Z^2+Z->List 1[Z-S+1:Next 0->R:For 1->Z To P:(K=List 1[Z])+R->R:Next R=0=>Goto K:Goto E IfEnd {13,23,33,43,63,73,83,93,8,18,38,48,58,68,88,98->List 1 0->R For 1->Z to 16 (K=List 1[Z])+R->R Next:R=>Goto K Lbl E 1000->J:JFrac J\^-1C->K:(2J)\^-1->E If (D<8)+(G<3)+(C<99 Then \10^(2-(C<9->K:K->J:(2J)\^-1->E:KFrac 2EC->K IfEnd 'TRAILING DIGITS ClrText:ClrList:{0,0,0,0,0->List 1 C>9=>Goto F:"WAIT":0->R ((C=1)(D=3)(G>1))+(((C=0)+(C=6))(D=4)(G>1))+R->R ((C<2)(D=5)(G>2))+((C>2)(D=5)(G>3))+R->R (((C=1)+(C>4))(D=6)(G>2))+((C=0)(D=6)(G>3))+R->R ((C=3)(D=6)(G>4))+((C<>3)(D=7)(G>3))+R->R ((C=3)(D=7)(G>4))+((C<>3)(D=8)(G>4))+R->R ((C=3)(D=8)(G>5))+((C<2)(D=9)(G>4))+R->R ((C>2)(D=9)(G>5))+((C=6)(D=10)(G>4))+R->R (((C<>3)(C<>6))(D=10)(G>5))+((C=3)(D=10)(G>6))+R->R R=>Goto K:(D<8)+(G<3=>Goto F \10^G->J:Int (sqrt(2(\10^D-J+C)+.25)-.5->F C=0=>{624,751,624,1,2000(5D-38->List 1 C=1=>{1747,125,3,125,4126+10000(D-8)^2->List 1 C=3=>{245,75,5,75,14077+30400(D-9->List 1 C=5=>{1571,125,179,125,20000D-155786->List 1 C=6=>{1257,368,7,368,4371+10000(D-8)^2->List 1 (D=10)(C=0=>{751,624,1,624,44624->List 1 (D=9)(C=5=>{125,1571,125,179,14089->List 1 (D=9)(C=6=>{368,1257,368,7,14003->List 1 (D=8)(C=3=>{75,245,75,5,4402->List 1 List 1[5->N:Goto I Lbl F ClrText:"COUNTDOWN TO ZERO...":1->R Int (sqrt(2\10^(D-1)-3.75)-.5->N:N->Z JFrac (E(N^2+N))=K=>Goto H Lbl G Dsz N:JFrac (E(N^2+N))<>K=>Goto G:N->Z Lbl H Isz N:JFrac (E(N^2+N))<>K=>Goto H Isz X:X=1=>N->W:X=2=>N->V:X=3=>N->U:X=4=>N->P Locate 2X,X+3,4-X:X<4=>Goto H For 1->X To 399:Next W-Z->List 1[1:V-W->List 1[2:U-V->List 1[3:P-U->List 1[4 \10^G->J:Int (sqrt(2(\10^D-J+C)+.25)-.5->F:Z->N:ClrText Lbl I For 1->X To 4:N+List 1[X->N:N>F=>Goto J .5(N^2+N->T:JFrac TJ\^-1<>C=>Goto J Locate 1,Y,T:Locate 16,Y,N:0->R:Isz Y If Y>6:Then Locate 5,7,"PRESS 'EXE'" While Getkey<>31:WhileEnd:ClrText:1->Y IfEnd Lbl J Next:N<=F=>Goto I:R=0=>Goto L Lbl K ClrText:"NONE ENDING WITH" If C=0:Then Locate 1,3,\10^(G-1:Locate 1,3,0:IfEnd If C:Then G-Int log C->J:Locate J,3,C If J>1:Then For 1->K To J-1:Locate K,3,0:Next:IfEnd IfEnd Lbl L Locate 3,7,"END...PRESS 'EXE'" While Getkey<>31:WhileEnd:Goto A ' Lbl M 'LEADING DIGITS 1->R:\10^(D-G->P Int (sqrt(2CP+.5->S:Int (sqrt(2(C+1)P-3.75)-.5->F If F>=S:Then .5(S^2+S->K:.5(S^2-S->T If KT:Isz S IfEnd For S->N To F:N+T->T:Locate 1,Y,T:Locate 16,Y,N 0->R:Isz Y If Y>6:Then Locate 5,7,"PRESS 'EXE'" While Getkey<>31:WhileEnd:ClrText:1->Y IfEnd Next IfEnd If R:Then "NONE LEADING WITH":Locate 1,3,C IfEnd:Goto L