HP Forums

Full Version: (42S) GCF
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Prompted by Eddie W Shore's

http://www.hpmuseum.org/forum/thread-6528.html

here's my short GCD programme.

The prog takes X & Y values from stack & returns GCD , or GCF if you wish, to stack level X.

Code:

0.    { 16-Byte Prgm }
1.    LBL “GCF”
2.    LBL 00
3.    MOD
4.    LASTX
5.    X<>Y
6.    X≠0?
7.    GTO 00
8.    R↓
9.    ABS
10.    END
Same as mine, except I have a "+" in step 8 (since you know X contains zero).
I also add Smallest Common Multiple:

*LBL "SCM"
RCL ST Y
RCL ST Y
XEQ 00
/
x
RTN

Cheers, Werner
Is this ABS necessary?

Günter
Yes, ABS is needed for some negative inputs, otherwise the GCD is returned as a negative which is surely not the GREATEST common factor.
(07-10-2016 07:21 AM)Werner Wrote: [ -> ]Same as mine, except I have a "+" in step 8 (since you know X contains zero).
I also add Smallest Common Multiple:

*LBL "SCM"
RCL ST Y
RCL ST Y
XEQ 00
/
x
RTN

Cheers, Werner

What does XEQ 00 do?
Look at your own code ;-)
it does GCF, I keep them both in 1 program.

Werner
(07-10-2016 04:41 AM)Gerald H Wrote: [ -> ]here's my short GCD programme.

Fine – my fractions programs used virtually the same code, but with a final + instead of R↓ which works as a DROP here. ;-)

FTR, here is an alternate GCD routine with a slightly shorter and thus faster loop. It can be used if Z does not have to be preserved:

Code:
01 LBL 00
02 STO Z
03 MOD
04 X≠0?
05 GTO 00
06 +
07 END

And finally a solution that returns both LCM and GCD (in Y resp. X):

Code:
01 LBL"LCMGCD"
02 STO T
03 X<>Y
04 ST* T
05 LBL 00
06 STO Z
07 MOD
08 X≠0?
09 GTO 00
10 +
11 ST/ Y
12 END

This is HP41 code. HP42s users may imagine an additional "ST" in the stack related commands. ;-)

Dieter
(07-11-2016 06:58 PM)Dieter Wrote: [ -> ]
(07-10-2016 04:41 AM)Gerald H Wrote: [ -> ]here's my short GCD programme.

Fine – my fractions programs used virtually the same code, but with a final + instead of R↓ which works as a DROP here. ;-)

FTR, here is an alternate GCD routine with a slightly shorter and thus faster loop. It can be used if Z does not have to be preserved:

Code:
01 LBL 00
02 STO Z
03 MOD
04 X≠0?
05 GTO 00
06 +
07 END

And finally a solution that returns both LCM and GCD (in Y resp. X):

Code:
01 LBL"LCMGCD"
02 STO T
03 X<>Y
04 ST* T
05 LBL 00
06 STO Z
07 MOD
08 X≠0?
09 GTO 00
10 +
11 ST/ Y
12 END

This is HP41 code. HP42s users may imagine an additional "ST" in the stack related commands. ;-)

Dieter

I tried the first programme but for various inputs it returned 1.
Sorry, my error, I entered STO "Z" for STO ST Z.

Now functions correctly.
Reference URL's