[Gambas-user] Least Common Multiple

Timothy Marshal-Nichols timothy.marshal-nichols at ...247...
Tue Apr 11 11:55:38 CEST 2006


Why limit yourself to 3 numbers. Here is a function that takes a integer
array:

PUBLIC SUB Main()
  DIM numbers AS Integer[3]
  ' Get numbers
  PRINT "Input three numbers: "
  INPUT numbers[0]
  INPUT numbers[1]
  INPUT numbers[2]
  PRINT "Least common multiple is " & LeastCommonMultiple(numbers)
END

PRIVATE FUNCTION LeastCommonMultiple(Numbers AS Integer[]) AS Integer
  DIM i AS Integer
  DIM loopNumber AS Integer
  ' If 0 is in the number array then the least common multiple is 0
  IF Numbers.Find(0) <> -1 THEN RETURN 0
  ' Find LCM
  loopNumber = 0
  WHILE TRUE
    ' Add the max integer in the array to loop variable
    loopNumber += Numbers[Numbers.Max]
    ' Check if this is LCM
    FOR i = 0 TO Numbers.Count - 1
      IF (loopNumber MOD Numbers[i]) <> 0 THEN
        ' Not LCM. So break out of for loop to
        ' try next value
        BREAK
      ELSE IF i = Numbers.Count - 1 THEN
        ' loopNumber MOD Numbers[i] is 0 for all integers
        ' in the array. So this is our LCM
        RETURN loopNumber
      END IF
    NEXT
  WEND
END

Thanks

8-{)} Timothy Marshal-Nichols
<mailto: timothy.marshal-nichols at ...247...>

  -----Original Message-----
  From: gambas-user-admin at lists.sourceforge.net
[mailto:gambas-user-admin at lists.sourceforge.net]On Behalf Of Allen Murphy
  Sent: Tuesday, 11 April 2006 02:20
  To: gambas-user at lists.sourceforge.net
  Subject: Re: [Gambas-user] Least Common Multiple


  If one or more of the values is zero then the LCM would have to be zero.
That said, I think there is also a logic problem in you WHILE statement.
With "AND" all the remainders would have to be non-zero, but as long as one
is non-zero you need to keep looking.  I used this code to test teh LCM and
using "OR" gave the correct result (I tested with 3, 4, 6 and 3, 5, 7).

  STATIC PUBLIC SUB Main()

    DIM first AS Integer
    DIM secnd AS Integer
    DIM third AS Integer

    DIM vmax AS Integer
    DIM loops AS Integer

    PRINT "Enter three numbers:"
    INPUT first
    INPUT secnd
    INPUT third

    vmax = Max(first, secnd, third)
    loops = vmax

    IF first <> 0 AND secnd <> 0 AND third <> 0 THEN

      WHILE loops MOD first <> 0 OR loops MOD secnd <> 0 OR loops MOD third
<> 0
        PRINT "new = " & Str(loops)
        loops = loops + vmax
      WEND

      PRINT "LCM = " & Str(loops)

    ELSE

      PRINT "LCM = 0"

    END IF

  END

  Hope this helps,
  Allen


  On 4/10/06, Peter Moers <peter.moers at ...626...> wrote:
    hi,

    I'm trying to calculate the least common multiple of 3 integers I
    tried the following code but had to find out it doesn't work when
    xs,ys or zs equals 0.

    DIM vmax AS Integer = Max(xs, ys, zs)
    DIM loops AS Integer = vmax
    WHILE loops MOD xs <> 0 AND loops MOD ys <> 0 AND loops MOD zs <> 0
      loops = loops + vmax
    WEND

    Now, I can split it up in 3 loops after checking the values for not
    being 0 but I think it must be able to do this with less code.
    Suggestions?

    Maybe LCM could implemented into the Gambas language, would be usefull.


    regards,

    --
    Peter Moers
    peter.moers at ...1417...
    Divides Webdesign - http://www.divides.be
    Startpagina - http://www.321start.be


    -------------------------------------------------------
    This SF.Net email is sponsored by xPML, a groundbreaking scripting
language
    that extends applications into web and mobile media. Attend the live
webcast
    and join the prime developer group breaking into this new coding
territory!
    http://sel.as-us.falkag.net/sel?cmdlnk&kid0944&bid$1720&dat1642
    _______________________________________________
    Gambas-user mailing list
    Gambas-user at lists.sourceforge.net
    https://lists.sourceforge.net/lists/listinfo/gambas-user


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.gambas-basic.org/pipermail/user/attachments/20060411/40844b20/attachment.html>


More information about the User mailing list