バッチファイルでProject Euler(13)

Problem 5

最小公倍数を求めるだけです。
最小公倍数は最大公約数がわかれば求まります。最大公約数は再帰で簡単に求まります。

@echo off

set /a N = 20
call :solve %N% 1
echo %ERRORLEVEL%
exit /b 0

:solve
    setlocal
    if %1 == 1 exit /b %2
    call :lcm %1 %2
    set /a k = %1 - 1
    call :solve %k% %ERRORLEVEL%
    exit /b %ERRORLEVEL%

:lcm
    setlocal
    call :gcd %1 %2
    set /a n = %1 / %ERRORLEVEL% * %2
    exit /b %n%

:gcd
    setlocal
    set /a r = %1 %% %2
    if %r% == 0 exit /b %2
    call :gcd %2 %r%
    exit /b %ERRORLEVEL%