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

試行錯誤していると、環境変数が多いと遅くなることがわかりました。
まず、指定した数だけ配列もどきの変数を生成し、そのあとに単純な和を取る処理にかかる時間を計測しました。

変数の数 処理時間
10 11.38s
100 12.03s
1000 15.95s
3000 26.00s
10000 61.27s
30000 160.52s

1000個ならそれほど遅くなりませんが、10000個だとかなり遅くなりますね。どうやらこの処理では変数が一つ増えるごとに5ms遅くなるようです。変数は1000に近いくらいの数に抑えたほうがよいようです。

@echo off

setlocal
set /a M = 30000
set /a a.size = %M%
call :fill_vector a 0

set /a N = 10000
call :get_time
set /a t = %ERRORLEVEL%
call :sum %N%
call :get_time
set /a t = %ERRORLEVEL% - %t%
echo %N% %M% %t:~0,-2%.%t:~-2%s
exit /b 0

:sum
    set /a s = 0
    set /a k = 1
    :loop_sum
        set /a s += %k%
        set /a k += 1
        if %k% LEQ %1 goto :loop_sum
    exit /b %s%

:fill_vector
    set /a end = "%1.size" - 1
    for /L %%i in (0, 1, %end%) do set /a %1_%%i = %2
    exit /b 0

:get_time
    setlocal
    set t=%TIME%
    set /a h = %t:~0,2%
    set /a m = 1%t:~3,2% %% 100
    set /a s = 1%t:~6,2% %% 100
    set /a ss = 1%t:~-2% %% 100
    set /a ret = ((%h% * 60 + %m%) * 60 + %s%) * 100 + %ss%
    exit /b %ret%