home > Project Euler >

ForNext

Shut the fuck up and write some code

Problem 1

3か5の倍数になっている1000未満の自然数を足し合わせよ

10未満の自然数のうち, 3 もしくは 5 の倍数になっているものは 3, 5, 6, 9 の4つがあり, これらの合計は 23 になる.
同じようにして, 1000 未満の 3 か 5 の倍数になっている数字の合計を求めよ.

Multiples of 3 and 5

If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.
Find the sum of all the multiples of 3 or 5 below 1000.

参考:等差数列の和の公式

初項a、公差d の等差数列の 初項から第n項 (末項 l=a+(n−1)d) までの和Snは (項数n)

VBScript

更新日 : 2012.12.19
Option Explicit

'単純に加算
Dim sum: sum = 0
Dim i
For i = 1 To 999
    If i Mod 3 = 0 Then
        sum = sum + i
    ElseIf i Mod 5 = 0 Then
        sum = sum + i
    End If
Next
WScript.Echo sum

'等差数列の和
sum = 0
'初項, 公差
Dim a_list: a_list = Array(3, 5, 15)
Dim a
For Each a in a_list
    Dim n: n = 999 \ a '項数
    Dim l: l = n * a   '末項 a+(n−1)d
    
    Select Case a
        Case 3, 5: sum = sum + ((a + l) * n / 2)
        Case Else: sum = sum - ((a + l) * n / 2)
    End Select
Next
WScript.Echo sum
D:\Project Euler\001>cscript //nologo 001.vbs
233168
233168

JScript

更新日 : 2012.12.19
//単純に加算
var sum = 0;
for (var i = 1; i < 1000; i++) {
    if ((i % 3) == 0) {
        sum += i;
    } else if ((i % 5) == 0) {
        sum += i;
    }
}
WScript.Echo(sum);

//等差数列の和
sum = 0
var a_list = [3, 5, 15];
for (var i in a_list) {
    var a = a_list[i];         //初項, 公差
    var n = parseInt(999 / a); //項数
    var l = n * a;             //末項 a+(n−1)d

    switch (i) {
        case "0":
        case "1": sum += ((a + l) * n / 2); break;
        default:  sum -= ((a + l) * n / 2); break;
    }
}
WScript.Echo(sum);
D:\Project Euler\001>cscript //nologo 001.js
233168
233168

Perl

更新日 : 2012.12.19
use strict;
use warnings;

#単純に加算
my $sum = 0;
for (1..999)
{
    if      (($_ % 3) == 0) {   $sum += $_; }
    elsif   (($_ % 5) == 0) {   $sum += $_; }
}
print "$sum\n";

#等差数列の和
$sum = 0;
#初項, 公差
foreach my $a (3, 5, 15)
{
    my $n = int(999 / $a); #項数
    my $l = $n * $a;       #末項 a+(n−1)d

    if      ($a == 3)   {   $sum += (($a + $l) * $n / 2);   }
    elsif   ($a == 5)   {   $sum += (($a + $l) * $n / 2);   }
    elsif   ($a == 15)  {   $sum -= (($a + $l) * $n / 2);   }
}
print "$sum\n";
D:\Project Euler\001>perl 001.pl
233168
233168

PHP

更新日 : 2012.12.19
<?php
#単純に加算
$sum = 0;
foreach (range(1, 999) as $i)
{
    if      (($i % 3) == 0) $sum += $i;
    elseif  (($i % 5) == 0) $sum += $i;
}
echo "$sum", "\n";

#等差数列の和
$sum = 0;
#初項, 公差
foreach( array(3, 5, 15) as $a )
{
    $n = (int)(999 / $a); #項数
    $l = $n * $a;         #末項 a+(n−1)d

    switch ($a)
    {
        case 3:
        case 5:
            $sum += (($a + $l) * $n / 2);
            break;
        default:
            $sum -= (($a + $l) * $n / 2);
            break;
    }
}
echo "$sum", "\n";
?>
D:\Project Euler\001>php 001.php
233168
233168

Python

更新日 : 2012.12.19
# coding: Shift_JIS

#単純に加算
sum = 0
for i in range(1, 1000):
    if i % 3 == 0:
        sum += i
    elif i % 5 == 0:
        sum += i
print sum

#等差数列の和
sum = 0
#初項, 公差
for a in [3, 5, 15]:
    n = int(999 / a) #項数
    l = n * a        #末項 a+(n−1)d

    if a == 3 or a == 5:
        sum += ((a + l) * n / 2)
    else:
        sum -= ((a + l) * n / 2)
print sum
D:\Project Euler\001>python 001.py
233168
233168

Ruby

更新日 : 2012.12.19
#単純に加算
sum = 0
(1..999).each do |i|
    if (i % 3) == 0
        sum += i
    elsif (i % 5) == 0
        sum += i
    end
end
puts sum

#等差数列の和
sum = 0;
#初項, 公差
[3, 5, 15].each do |a|
    n = 999 / a #項数
    l = n * a;  #末項 a+(n−1)d

    case a
        when 3, 5
            sum += ((a + l) * n / 2)
        else
            sum -= ((a + l) * n / 2)
    end
end
puts sum
D:\Project Euler\001>ruby 001.rb
233168
233168

PowerShell

更新日 : 2012.12.19
#単純に加算
$sum = 0
foreach ($i in 1..999)
{
    if (($i % 3) -eq 0)
    {
        $sum += $i
    }
    elseif (($i % 5) -eq 0)
    {
        $sum += $i
    }
}
Write-Host $sum

#等差数列の和
$sum = 0
#初項, 公差
foreach($a in @(3, 5, 15))
{
    $n = [math]::floor(999 / $a) #項数
    $l = $n * $a                 #末項 a+(n−1)d

    switch ($a)
    {
        3       {$sum += (($a + $l) * $n / 2)}
        5       {$sum += (($a + $l) * $n / 2)}
        default {$sum -= (($a + $l) * $n / 2)}
    }
}
Write-Host $sum
D:\Project Euler\001>powershell -file 001.ps1
233168
233168

Scala

更新日 : 2012.12.30

■単純に加算

scala> (1 to 9)
res0: scala.collection.immutable.Range.Inclusive with scala.collection.immutable.Range.ByOne = Range(1, 2, 3, 4, 5, 6, 7, 8, 9)

scala> (1 to 9).filter(n => n % 3 == 0 || n % 5 == 0)
res1: scala.collection.immutable.IndexedSeq[Int] = Vector(3, 5, 6, 9)

scala> (1 to 9).filter(n => n % 3 == 0 || n % 5 == 0).sum
res2: Int = 23

scala> (1 to 999).filter(n => n % 3 == 0 || n % 5 == 0).sum
res3: Int = 233168

scala>

■等差数列の和

scala> def sn(a:Int, lim:Int) = {
     | val n = lim / a
     | val l = n * a
     | (a + l) * n / 2
     | }
sn: (a: Int,lim: Int)Int

scala> sn(3, 9)
res4: Int = 18

scala>  List(3, 5).map(sn(_, 999)).sum  - sn(15, 999)
res5: Int = 233168

scala>
scala> def multiples_of_3_and_5(n:Int) = {
     |     if (n == 15) -sn(n, 999)
     |     else          sn(n, 999)
     | }
multiples_of_3_and_5: (n: Int)Int

scala> List(3, 5, 15).map(multiples_of_3_and_5).sum
res6: Int = 233168

scala>

F#

更新日 : 2012.12.31

■単純に加算

> [1..9];;
val it : int list = [1; 2; 3; 4; 5; 6; 7; 8; 9]
> [1..9]
- |> List.filter (fun x -> x % 3 = 0 || x % 5 = 0)
- ;;
val it : int list = [3; 5; 6; 9]
> [1..9]
- |> List.filter (fun x -> x % 3 = 0 || x % 5 = 0)
- |> List.sum
- ;;
val it : int = 23
> [1..999]
- |> List.filter (fun x -> x % 3 = 0 || x % 5 = 0)
- |> List.sum
- ;;
val it : int = 233168
>

■等差数列の和

> let sn a lim =
-   let n = lim / a in
-   let l = a * n in
-   (a + l) * n / 2
- ;;

val sn : int -> int -> int

> sn 3 9;;
val it : int = 18
> [3;5]
- |> List.map (fun n -> sn n 999)
- |> List.sum
- |> fun x -> x - sn 15 999
- ;;
val it : int = 233168
>
> [3;5;15]
- |> List.map (fun n -> if n = 15 then -(sn n 999) else sn n 999)
- |> List.sum
- ;;
val it : int = 233168
>
> let multiples_of_3_and_5 n =
-     if   n = 15 then -(sn n 999)
-     else               sn n 999
- ;;

val multiples_of_3_and_5 : int -> int

> [3;5;15]
- |> List.map (fun n -> multiples_of_3_and_5 n)
- |> List.sum
- ;;
val it : int = 233168
> [3;5;15]
- |> List.map multiples_of_3_and_5
- |> List.sum
- ;;
val it : int = 233168
>

C

C++

C++Builder

VC++

C#

Java

Objective-C

D

VB

VB.NET

Delphi

Ada

PL/SQL

T-SQL

関数型

inserted by FC2 system