[comp.sys.handhelds] Repost: HP48: Factoring Integers

kskalb@faui1f.informatik.uni-erlangen.de (Klaus Kalb) (01/29/91)

Since several people have missed the factorization program, here is
the repost. It's the orginal posting, as you can see form the
xmas-greeting ;-).

To the guy who collects stuff for the EduCalc-goodies disks:
   Include this, if you like. But inform me that you did so. Thanx.

-KK

----------------------------------------------------------------------

Hello,

This routine factors integers into primes.
The program does trial division by all numbers that
are not true multiples of 2,3,5 or 7.
The main work is done in mcode, so it is fast.
You need ASC\-> to install it.

Happy Christmas and a merry new year,
-KK

---------------------------------------------------------------------
                         Author
---------------------------------------------------------------------

  Mail any suggestions or comments to

	 	 kskalb@informatik.uni-erlangen.de

---------------------------------------------------------------------
                         Usage
---------------------------------------------------------------------

    Input:
      Level 2: Number n to be factored (binary or real; n < 2^63)
      Level 1: Bound  b (binary or real; b < 2^20)

    Output:
      Level 1: List of Factors 

If the program is sure that all numbers in the output list are indeed
primes, the list will be tagged with a plus-sign.

If the tag is missing, the last entry in the list might not be a prime.

All divisors t of n with t<=b will be found.

The entries in the result will be real, unless they are greate then 2^39.
Note that this can only happen to the last number in the list.

---------------------------------------------------------------------
                         Installation
---------------------------------------------------------------------

  -- Download the following program to your HP48.
  -- Be sure that ASC/-> is accessible.
  -- Evaluate the downloaded object.
  -- A program named 'TRIAL' will appear on the current directory.


---------------------------------------------------------------------
                         Warning
---------------------------------------------------------------------

  The program 'TRIAL' contains a code object.
  To my knowledge, programs containing code object can't be
  edited on the HP48 by standard means, so don't try it.

---------------------------------------------------------------------
                         Disclaimer
---------------------------------------------------------------------

     This program makes use of undocumented low-level features of
     the HP48SX calculator, and may or may not cause loss of data,
     excessive battery drainage, and/or damage to the calculator
     hardware.  The Author takes no responsibility whatsoever for 
     any damage caused by the use of this program.

     This software is provided "as is" and WITHOUT ANY EXPRESS OR
     IMPLIED WARRANTIES, including, but not limited to, THE IMPLIED
     WARRANTIES OF MERCHANTABILITY and FITNESS FOR A PARTICULAR PURPOSE.

------------------------------------------------------------------------------
   Klaus Kalb    | mail :  IMMD1 / Martenstr. 3 / W-8520 Erlangen / Germany   
                 | email:  kskalb@immd1.informatik.uni-erlangen.de   
------------------------------------------------------------------------------

%%HP: T(3)A(R)F(,);
@
@ TRIAL (generated by hp48pack at 21.12.90)
@
@$NAME     TRIAL
@$DATE     21.12.90
@$VERSION  2.18
@
@
@ UserTrial      2.02 11.12.90
@ CodeTrial      1.00 21.12.90
@ Install        2.00 21.12.90
@ TRIAL          2.00 21.12.90
@
@
\<< CLLCD
  "----------------------" DUP 1 DISP
  "TRIAL    2.18 21.12.90" 2 DISP
   DUP 3 DISP
   " Factoring by a Wheel" 4 DISP
   "    by Klaus Kalb" 5 DISP
   6 DISP
\<<
@ $NAME    UserTrial
@ $DATE    11.12.90
@ $VERSION 2.02

\<<
   \-> n b
   \<<
     IFERR
       IF n TYPE DUP 0 \=/ SWAP 10 \=/ AND THEN 514 DOERR END
       IF b TYPE DUP 0 \=/ SWAP 10 \=/ AND THEN 514 DOERR END
       IF n #0d + DUP #7FFFFFFFFFFFFFFFh > SWAP #0d == OR THEN 515 DOERR END
       IF b #0d + #FFFFFh > THEN 515 DOERR END
     THEN
       IF -55 FC? THEN n b END
       ERRN DOERR
     END
     n #0d +
     b #0d +
     CodeTrial
     SWAP
     #18DBFh SYSEVAL 	@ Short to Real
     \-> r k
     \<<
       IF k THEN
         1 k START
           #18DBFh SYSEVAL 
           k ROLL
         NEXT
       END
       k \->LIST

       IF r #1d > THEN
         r
         IF
           DUP DUP B\->R R\->B ==
           THEN
             B\->R
           END
           +
         END
       IF b #1d + DUP * r > THEN "+" \->TAG END
     \>>
   \>>
\>>

@ $END UserTrial

 'UserTrial' STO


@ $NAME    CodeTrial
@ $DATE    21.12.90
@ $VERSION 1.00
@ $COMMAND ASC\->

"CCD20B61008F77F3510110AAF210810B2081B58082444000C213665702424626
42466264264684242486462462664246264242A2A021224011BD2BF6BF6BF6BF
6BF6BF61088F2D7608F735608FB97601112F8DD6950AF015A097CB12081B5808
24C7FFFC21366EDF118C24A91081181129F2C8111118AF3AF19F262A76B779FE
7F81EA75A7F9F280B7AB7597F9E11A9F180AF910A97CD3AF4101113132AF2263
01A7A103208F2D7608F735608FB9760113130657F1606E3F2485"

@ $END CodeTrial

 ASC\->
 'CodeTrial' STO


@ $NAME    Install
@ $DATE    21.12.90
@ $VERSION 2.00
\<<
  'UserTrial' RCL
   #054AFh SYSEVAL  @ PRG\->
   #05459h SYSEVAL  @ \->LIST
   DUP 'CodeTrial' POS 
   SWAP SIZE
   SWAP - 2 + \-> n 
   \<<
      'UserTrial' RCL #054AFh SYSEVAL 
      n ROLL
      DROP 'CodeTrial' RCL
      n ROLLD 	
   \>>
   #05445h SYSEVAL @ \->PRG
\>>
@ $END Install

 'Install' STO


@ $NAME    TRIAL
@ $DATE    21.12.90
@ $VERSION 2.00
@ $COMMAND EVAL

\<<
   Install
   { 'UserTrial' 'CodeTrial' 'Install' } PURGE
\>>
@ $END TRIAL

 EVAL
 'TRIAL' STO


\>>
  " unpack ?" 7 DISP
@
  { { "YES" \<< EVAL 
             " TRIAL installed." 7 DISP 3 FREEZE
             0 MENU \>> }
             "" "" "" "" 
    { "NO" \<< DROP 
             0 MENU \>> }
  } 3 FREEZE TMENU \>> 

@$END TRIAL

@ END END END END END END END END END END END END END END END END END END

akcs.joehorn@hpcvbbs.UUCP (Joseph K. Horn) (02/05/91)

Klaus: Thanks for your excellent work on factoring.  It's all on EduCALC
Goodies disk #3.  Keep up the good work!  [-jkh-]