Smallest multiple: Difference between revisions

→‎{{header|Python}}: Second version no longer needed – first has switched to integer division and no longer errors with higher values.
(→‎{{header|Python}}: Second version no longer needed – first has switched to integer division and no longer errors with higher values.)
Line 518:
 
for i in [10, 20, 200, 2000]:
print(str(i) + ':', reduce(lcm, range(1, i + 1)))</lang>
</lang>{{out}}
<pre>10: 2520
10: 2520
20: 232792560
200: 337293588832926264639465766794841407432394382785157234228847021917234018060677390066992000
2000: 151117794877444315307536308337572822173736308853579339903227904473000476322347234655122160866668946941993951014270933512030194957221371956828843521568082173786251242333157830450435623211664308500316844478617809101158220672108895053508829266120497031742749376045929890296052805527212315382805219353316270742572401962035464878235703759464796806075131056520079836955770415021318508272982103736658633390411347759000563271226062182345964184167346918225243856348794013355418404695826256911622054015423611375261945905974225257659010379414787547681984112941581325198396634685659217861208771400322507388161967513719166366839894214040787733471287845629833993885413462225294548785581641804620417256563685280586511301918399010451347815776570842790738545306707750937624267501103840324470083425714138183905657667736579430274197734179172691637931540695631396056193786415805463680000</pre>
</pre>
 
 
Or, defining '''lcm''' a little differently:
<lang python>'''Smallest multiple'''
 
from math import gcd
from functools import reduce
 
 
# smallestEvenlyDivisibleByOneToN :: Integer -> Integer
def smallestEvenlyDivisibleByOneToN(n):
'''The smallest positive integer this is evenly
divisible by all of the integers in [1..N]
'''
return reduce(
uncurry(lcm),
range(1, 1 + n)
)
 
 
# ------------------------- TEST -------------------------
# main :: IO ()
def main():
'''Tests for n drawn from {10, 20, 200}'''
xs = [10, 20, 200, 2000]
w = len(str(max(xs)))
print(
'\n'.join([
f'{n:>{w}} -> {smallestEvenlyDivisibleByOneToN(n)}'
for n in xs
])
)
 
 
# ----------------------- GENERIC ------------------------
 
# lcm :: Int -> Int -> Int
def lcm(x):
'''The smallest positive integer divisible
without remainder by both x and y.
'''
def go(y):
return 0 if (0 == x or 0 == y) else abs(
y * (x // gcd(x, y))
)
return go
 
 
# uncurry :: (a -> b -> c) -> ((a, b) -> c)
def uncurry(f):
'''A function over a tuple,
derived from a curried function.
'''
def go(*ab):
return f(ab[0][0])(ab[0][1]) if (
1 == len(ab)
) else f(ab[0])(ab[1])
return go
 
 
# MAIN ---
if __name__ == '__main__':
main()</lang>
{{Out}}
<pre> 10 -> 2520
20 -> 232792560
200 -> 337293588832926264639465766794841407432394382785157234228847021917234018060677390066992000
2000 -> 151117794877444315307536308337572822173736308853579339903227904473000476322347234655122160866668946941993951014270933512030194957221371956828843521568082173786251242333157830450435623211664308500316844478617809101158220672108895053508829266120497031742749376045929890296052805527212315382805219353316270742572401962035464878235703759464796806075131056520079836955770415021318508272982103736658633390411347759000563271226062182345964184167346918225243856348794013355418404695826256911622054015423611375261945905974225257659010379414787547681984112941581325198396634685659217861208771400322507388161967513719166366839894214040787733471287845629833993885413462225294548785581641804620417256563685280586511301918399010451347815776570842790738545306707750937624267501103840324470083425714138183905657667736579430274197734179172691637931540695631396056193786415805463680000</pre>
 
=={{header|Raku}}==
9,655

edits