Sum multiples of 3 and 5: Difference between revisions
Content added Content deleted
(→{{header|J}}: remove unnecessary complexity -- the using gauss's technique is the right approach here.) |
(→{{header|Wren}}: Added GMP version.) |
||
Line 4,490: | Line 4,490: | ||
=={{header|Wren}}== |
=={{header|Wren}}== |
||
===Simple version=== |
|||
<lang ecmascript>var sum35 = Fn.new { |n| |
<lang ecmascript>var sum35 = Fn.new { |n| |
||
n = n - 1 |
n = n - 1 |
||
Line 4,506: | Line 4,507: | ||
<pre> |
<pre> |
||
233168 |
233168 |
||
</pre> |
|||
<br> |
|||
===Fast version with arbitrary precision=== |
|||
{{trans|C}} |
|||
{{libheader|Wren-gmp}} |
|||
{{libheader|Wren-fmt}} |
|||
<lang ecmascript>import "./gmp" for Mpz |
|||
import "./fmt" for Fmt |
|||
var sumMultiples = Fn.new { |result, limit, f| |
|||
var m = Mpz.from(limit).sub(1).fdiv(f) |
|||
result.set(m).inc.mul(m).mul(f).rsh(1) |
|||
} |
|||
var limit = Mpz.one |
|||
var tempSum = Mpz.new() |
|||
var sum35 = Mpz.new() |
|||
var max = 25 |
|||
Fmt.print("$*s $s", max + 1, "limit", "sum") |
|||
for (i in 0..max) { |
|||
Fmt.write("$*s ", max + 1, limit) |
|||
sumMultiples.call(tempSum, limit, 3) |
|||
sum35.set(tempSum) |
|||
sumMultiples.call(tempSum, limit, 5) |
|||
sum35.add(tempSum) |
|||
sumMultiples.call(tempSum, limit, 15) |
|||
sum35.sub(tempSum) |
|||
System.print(sum35) |
|||
limit.mul(10) |
|||
}</lang> |
|||
{{out}} |
|||
<pre> |
|||
limit sum |
|||
1 0 |
|||
10 23 |
|||
100 2318 |
|||
1000 233168 |
|||
10000 23331668 |
|||
100000 2333316668 |
|||
1000000 233333166668 |
|||
10000000 23333331666668 |
|||
100000000 2333333316666668 |
|||
1000000000 233333333166666668 |
|||
10000000000 23333333331666666668 |
|||
100000000000 2333333333316666666668 |
|||
1000000000000 233333333333166666666668 |
|||
10000000000000 23333333333331666666666668 |
|||
100000000000000 2333333333333316666666666668 |
|||
1000000000000000 233333333333333166666666666668 |
|||
10000000000000000 23333333333333331666666666666668 |
|||
100000000000000000 2333333333333333316666666666666668 |
|||
1000000000000000000 233333333333333333166666666666666668 |
|||
10000000000000000000 23333333333333333331666666666666666668 |
|||
100000000000000000000 2333333333333333333316666666666666666668 |
|||
1000000000000000000000 233333333333333333333166666666666666666668 |
|||
10000000000000000000000 23333333333333333333331666666666666666666668 |
|||
100000000000000000000000 2333333333333333333333316666666666666666666668 |
|||
1000000000000000000000000 233333333333333333333333166666666666666666666668 |
|||
10000000000000000000000000 23333333333333333333333331666666666666666666666668 |
|||
</pre> |
</pre> |
||