# hp41programs

Tau Ramanujan Tau Numbers for the HP-41

Overview

-Ramanujan numbers Tau(n) are defined by

x.[ (1-x).(1-x2).(1-x3)....... ]24  = Tau(1).x + Tau(2).x2 + Tau(3).x3 + ..... + Tau(n).xn + ......

-"TAU" calculates Tau(n) by the recurrence relation:

(n-1).Tau(n) = SUM1<=m<=b(n) (-1)m+1 (2m+1).(n-1-9m(m+1)/2).Tau(n-m(m+1)/2)     where   b(n) = INT ((8n+1)1/2-1)/2

-However, this algorithm is very sensitive to roundoff errors and results are exact up to n = 43 only.
-Therefore, another approach is necessary to compute Tau(n) for larger arguments.
-"TAU2" employs the formula:

Tau(n) = n4.s(n) - 24 SUM0<k<n k2.(35.k2-52.k.n+18.n2).s(k).s(n-k)     ( n > 1 )  where  s(k) is the sum of the divisors of k.

-Multiple precision is used and Tau(n) may be exactly computed up to n = 13868.

1°) Program#1   ( small arguments )

-This program calculates and stores Tau(1) , Tau(2) , ...... , Tau(n) into registers R01 , R02 , ....... , Rnn

Data Registers:  R00 = 0 , R01 = Tau(1) , ........... , Rnn = Tau(n)
Flags: /
Subroutines: /

-Synthetic registers M , N , O may be replaced by any unused data registers,
for instance R97 , R98 , R99  if  n < 97

 01  LBL "TAU"  02  STO O 03  .1 04  % 05  2 06  + 07  STO M 08  CLX 09  STO 00 10  SIGN 11  STO 01 12  LBL 01 13  RCL M 14  INT 15  8 16  * 17  RCL 01 18  + 19  SQRT 20  RCL 01        21  - 22  2 23  / 24  INT 25  STO N 26  CLX 27  FIX 0 28  LBL 02 29  RCL M 30  RCL 01 31  RCL N 32  ST+ Y 33  * 34  2 35  / 36  - 37  X<>Y 38  RCL IND Y 39  LASTX 40  9 41  * 42  RCL 01 43  + 44  RCL M 45  INT 46  - 47  * 48  RCL N 49  ST+ X 50  RCL 01 51  + 52  * 53  RCL 01        54  CHS 55  RCL N 56  Y^X 57  * 58  + 59  DSE N 60  GTO 02 61  RCL M 62  INT 63  RCL 01 64  - 65  / 66  RND 67  STO IND M 68  ISG M 69  GTO 01 70  RCL O 71  SIGN 72  RCL IND L 73  CLA 74  FIX 4 75  END

( 106 bytes / SIZE nnn+1, but at least 003 )

 STACK INPUTS OUTPUTS X n tau(n) L / n

Example:    Evaluate Tau(10)

10  XEQ "TAU"  >>>>  Tau(10) = -115920  in X-register and in R10  ( execution time = 32 seconds )

-We also have   1    , -24 ,  252 , -1472 , 4830 , -6048 , -16744 , 84480 , -113643  ( i-e Tau(1) , .......... , Tau(9) )
in registers   R01 , R02 , R03 ,   R04  ,  R05 ,    R06 ,     R07  ,    R08  ,     R09       respectively

Notes:

-Without lines 27 and 66  ( FIX 0 and RND ) , Tau(33) would already be wrong !
-This program yields Tau(84) = 6,188,510,373 whereas the correct value is Tau(84) = 6,211,086,336
and 300 XEQ "TAU" produces a completely meaningless result !
-Obviously, roundoff errors overwhelm the wanted function.

2°) Program#2   ( 1 < n < 13869 )

-The following program computes Tau(n) by groups of 4 digits in registers R15 R16 R17 R18 R19 R20

Data Registers:        R01 = n   ;   R00 and R02 thru R20 are used for temporary data storage and when the program stops:

R03 = Tau(n) = X-register ( approximate value )
R15 to R20 contain the digits of Tau(n) ( exact value )
Flags: /
Subroutines: /

-If you don't have an HP-41CX , replace line 08 by  0  LBL 00  STO IND Y  ISG Y  GTO 00   or add  CLRG  after line 01

 01  LBL "TAU2"   02  STO 00   03  STO 01   04   E4   05  STO 02   06  15.02   07  STO 14   08  CLRGX     09  DSE 00   10  LBL 01   11  RCL 00   12  X^2   13  ENTER^   14  STO Z   15  RCL 02   16  MOD   17  STO 04   18  -   19  RCL 02   20  /   21  STO 03   22  CLX   23  35   24  *   25  RCL 00   26  RCL 01   27  *   28  52   29  *   30  -   31  RCL 01   32  X^2   33  18   34  *   35  +   36  STO Y   37  RCL 02   38  MOD   39  STO 07   40  -   41  RCL 02   42  /   43  STO Y   44  RCL 02   45  MOD   46  STO 06 47  -   48  RCL 02   49  /   50  STO 05   51  RCL 00   52  XEQ 05   53  RCL 01   54  RCL 00   55  -   56  XEQ 05   57  *   58  STO Y   59  RCL 02   60  MOD   61  STO 09   62  -   63  RCL 02   64  /   65  STO 08   66  XEQ 08   67  DSE 00   68  GTO 01   69  RCL 14   70  24   71  CHS   72  LBL 02   73  ST* IND Y    74  ISG Y   75  GTO 02   76  RCL 01   77  X^2   78  STO Y   79  RCL 02   80  MOD   81  STO 04   82  STO 07   83  -   84  RCL 02   85  /   86  STO 03   87  STO 06   88  CLX   89  STO 05   90  RCL 01   91  XEQ 05   92  STO Y 93  RCL 02   94  MOD   95  STO 09   96  -   97  RCL 02   98  /   99  STO 08 100  XEQ 08 101  RCL 02 102  RCL 02 103  RCL 14 104  STO 00 105  CLX 106  LBL 03 107  RCL IND 00 108  + 109  * 110  ISG 00 111  GTO 03 112  LASTX 113  STO 03 114  SIGN 115  STO 04 116  ST* 02 117  20.015 118  STO 00 119  CLX 120  LBL 04 121  RCL IND 00 122  + 123  STO Y 124  RCL 02 125  MOD 126  STO IND 00 127  - 128  RCL 02 129  / 130  RCL 04 131  * 132  DSE 00 133  GTO 04 134  ST+ 15 135  RCL 14 136  RCL 03 137  RTN 138  LBL 05 139  STO 08 140  SQRT 141  INT 142  STO 09 143  CLX 144  LBL 06 145  RCL 08 146  RCL 09 147  / 148  FRC 149  X#0? 150  GTO 07       151  X<> L 152  ST+ Y 153  RCL 09 154  X#Y? 155  ST+ Z 156  RDN 157  LBL 07 158  RDN 159  DSE 09 160  GTO 06 161  RTN 162  LBL 08   163  RCL 04 164  RCL 07 165  * 166  STO Y 167  RCL 02 168  MOD 169  STO 13 170  - 171  RCL 02 172  / 173  RCL 03 174  RCL 07 175  * 176  + 177  RCL 04 178  RCL 06 179  * 180  + 181  STO Y 182  RCL 02 183  MOD 184  STO 12 185  - 186  RCL 02 187  / 188  RCL 03 189  RCL 06 190  * 191  + 192  RCL 04 193  RCL 05 194  * 195  + 196  STO Y 197  RCL 02        198  MOD 199  STO 11 200  - 201  RCL 02 202  / 203  RCL 03 204  RCL 05 205  * 206  + 207  STO 10 208  RCL 09  209  RCL 13 210  * 211  STO Y 212  RCL 02 213  MOD 214  ST+ 20 215  - 216  RCL 02 217  / 218  RCL 08 219  RCL 13 220  * 221  + 222  RCL 09 223  RCL 12 224  * 225  + 226  STO Y 227  RCL 02 228  MOD 229  ST+ 19 230  - 231  RCL 02 232  / 233  RCL 08 234  RCL 12 235  * 236  + 237  RCL 09 238  RCL 11 239  * 240  + 241  STO Y 242  RCL 02        243  MOD 244  ST+ 18 245  - 246  RCL 02 247  / 248  RCL 08 249  RCL 11 250  * 251  + 252  RCL 09 253  RCL 10 254  * 255  + 256  STO Y 257  RCL 02 258  MOD 259  ST+ 17 260  - 261  RCL 02 262  / 263  RCL 08 264  RCL 10 265  * 266  + 267  STO Y 268  RCL 02 269  MOD 270  ST+ 16 271  - 272  RCL 02 273  / 274  ST+ 15 275  RTN 276  END

( 352 bytes / SIZE 021 )

 STACK INPUTS OUTPUTS Y / 15.020 X n tau(n)

15.020  = control number of the exact result ( in registers R15 thru R20 )
X-output is only an approximate value

Example1:     Calculate  Tau(84)

84  XEQ "TAU2"  >>>>  Tau(84) =  6211086336 ( 13m07s )    In this case, the approximate value is quite exact!

which is confirmed by   R15 = 0 , R16 = 0 , R17 = 0 , R18 = 62 , R19 = 1108 , R20 = 6336

Example2:    Compute Tau(314)

314  XEQ "TAU2"  >>>>  Tau(314) = -3.156280211 1013  = approximate value ( in 1h07mn20s )

and we have:  R15 = 0 , R16 = 0 , R17 = -31 , R18 = -5628 , R19 = -210 ( which is to be read -0210 ) , R20 = -5744

whence   Tau(314) = -31562802105744

-Remark that registers R15 to R20 are inferior or equal to zero when Tau(n) < 0

Notes:

-With a good 41-emulator in turbo mode  13868 XEQ "TAU2"  yields:

R15 = -336 ; R16 = -1948 ; R17 = -0538 ; R18 = -4247 ; R19 = -3535 ; R20 = -1552   ( in about 1h23mn on my PC )

whence  Tau(13868) = -33619480538424735351552      with a "real" HP-41, execution time is probably of the order of  8 or 9 days!

-For n > 13868 , the calculations involve numbers greater than 1010 and the results are only approximate,
but if we use more registers to perform multiplications and additions, this limit can be overcome.