总和I小于J中的参数

nic*_*435 3 sum j

我使用J代替这个算法,它意味着将所有正数的总和小于或等于参数.

  sum=: + +@:+/&:i.
Run Code Online (Sandbox Code Playgroud)

有用例:

   sum 3
6 
Run Code Online (Sandbox Code Playgroud)

有没有更有效的方法来做到这一点?我还是J的新手,我只是在想你们将如何实现这一点.

Eel*_*vex 7

你希望(+/)(@:)的sum(i.)直到参数的整数列表().所以写下:

sum2 =: +/ @: i.
Run Code Online (Sandbox Code Playgroud)

并记住列表从0到(arg - 1),在获取列表之前递增参数:

sum2 =: +/ @: i. @ >:
Run Code Online (Sandbox Code Playgroud)

效率很高:

timespacex'sum2 1e5'
0.000327 525376
timespacex'sum 1e5'
0.033216 525440
Run Code Online (Sandbox Code Playgroud)

当然,最有效的方法是使用公式 -:@(*>:)