home > さまざまな言語で数値計算 > 数列の積・階乗・順列・組合せ >

さまざまな言語で数値計算

Only Do What Only You Can Do

等差数列の積 (非再帰版)

初項 $ a $, 公差 $ d $ の等差数列の初項から第 $ n $ 項までの積は, 次の式で表せます.

また, 記号を用いて

と表すこともできます.

しかし, は, 記述を簡潔にしているだけで, 計算が簡単になっているわけではありません.

たとえば, 初項 $ 5 $ , 公差 $ 3 $ の等差数列 $ 5, 8, 11, 14 $ の積 は

であり, 素直に数列を順番に乗算して行った方が早いです.

この節では, 通常の繰り返し処理を使って, 初項 $ 5 $, 公差 $ 3 $, 項数 $ 10 $ の数列の積を求めます.

VBScript

Option Explicit

Dim a: a = 5  '初項 5
Dim d: d = 3  '公差 3
Dim n: n = 10 '項数 10
Dim p: p = 1  '積
Dim m

Dim i
For i = 1 To n
    m = a + (d * (i - 1))
    WScript.StdOut.Write m & " * " & p & " = "

    p = p * m
    WScript.Echo p
Next
Z:\>cscript //nologo 0401.vbs
5 * 1 = 5
8 * 5 = 40
11 * 40 = 440
14 * 440 = 6160
17 * 6160 = 104720
20 * 104720 = 2094400
23 * 2094400 = 48171200
26 * 48171200 = 1252451200
29 * 1252451200 = 36321084800
32 * 36321084800 = 1162274713600

JScript

var a = 5  // 初項 5
var d = 3  // 公差 3
var n = 10 // 項数 10
var p = 1  // 積

for (var i = 1; i <= n; i++) {
    var m = a + (d * (i - 1))
    p *= m
}
WScript.Echo(p)
Z:\>cscript //nologo 0401.js
1162274713600

PowerShell

$a = 5  # 初項 5
$d = 3  # 公差 3
$n = 10 # 項数 10
$p = 1  # 積

foreach ($i in 1..$n)
{
    $m = $a + ($d * ($i - 1))
    $p *= $m;
}
Write-Host $p
Z:\>powershell -file 0401.ps1
1162274713600

Perl

$a = 5;  # 初項 5
$d = 3;  # 公差 3
$n = 10; # 項数 10
$p = 1;  # 積

for (1..$n)
{
    $m = $a + ($d * ($_ - 1));
    $p *= $m;
}
print $p;
Z:\>perl 0401.pl
1162274713600

PHP

<?php
$a = 5;  # 初項 5
$d = 3;  # 公差 3
$n = 10; # 項数 10
$p = 1;  # 積

foreach (range(1, $n) as $i)
{
    $m = $a + ($d * ($i - 1));
    $p *= $m;
}
echo $p;
?>
Z:\>php 0401.php
1162274713600

Python

a = 5  # 初項 5
d = 3  # 公差 3
n = 10 # 項数 10
p = 1  # 積

for i in range(1, n + 1):
    m = a + (d * (i - 1))
    p *= m
print p
Z:\>python 0401.py
1162274713600

Ruby

a = 5  # 初項 5
d = 3  # 公差 3
n = 10 # 項数 10
p = 1  # 積

(1..n).each do |i|
    m = a + (d * (i - 1))
    p *= m
end
puts p
Z:\>ruby 0401.rb
1162274713600

Groovy

Pascal

Program Pas0401(arg);
const
    a:Integer = 5;  // 初項 5
    d:Integer = 3;  // 公差 3
    n:Integer = 10; // 項数 10
var
    p:Int64   = 1;  // 積
    m:Integer;
    i:Integer;
begin
    for i := 1 to n do
    begin
        m := a + (d * (i - 1));
        p := p * m;
    end;
    writeln(p);
end.
Z:\>fpc Pas0401.pp -v0
Free Pascal Compiler version 2.6.2 [2013/02/12] for i386
Copyright (c) 1993-2012 by Florian Klaempfl and others

Z:\>Pas0401
1162274713600

Ada

VB.NET

Option Explicit

Module VB0401
    Sub Main()
        Dim a As Integer = 5  '初項 5
        Dim d As Integer = 3  '公差 3
        Dim n As Integer = 10 '項数 10
        Dim p As Long = 1     '積
        
        For i As Integer = 1 To n
            Dim m As Integer = a + (d * (i - 1))
            p *= m
        Next
        Console.WriteLine(p)
    End Sub
End Module
Z:\>vbc -nologo VB0401.vb

Z:\>VB0401
1162274713600

C#

using System;

public class CS0401
{
    public static void Main()
    {
        int a = 5;   // 初項 5
        int d = 3;   // 公差 3
        int n = 10;  // 項数 10
        long p = 1;  // 積
        
        for (int i = 1; i <= n; i++)
        {
            int m = a + (d * (i - 1));
            p *= m;
        }
        Console.WriteLine(p);
    }
}
Z:\>csc -nologo CS0401.cs

Z:\>CS0401
1162274713600

Java

public class Java0401 {
    public static void main(String []args) {
        int a = 5;   // 初項 5
        int d = 3;   // 公差 3
        int n = 10;  // 項数 10
        long p = 1;  // 積

        for (int i = 1; i <= n; i++) {
            int m = a + (d * (i - 1));
            p *= m;
        }
        System.out.println(p);
    }
}
Z:\>javac Java0401.java

Z:\>java Java0401
1162274713600

C++

#include <iostream>
using namespace std;

int main()
{
    int a = 5;     // 初項 5
    int d = 3;     // 公差 3
    int n = 10;    // 項数 10
    __int64 p = 1; // 積
    
    for (int i = 1; i <= n; i++)
    {
        int m = a + (d * (i - 1));
        p *= m;
    }    
   cout << p << endl; 

   return 0;
}
Z:\>bcc32 CP0401.cpp
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
CP0401.cpp:
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland

Z:\>CP0401
1162274713600

Objective-C

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[])
{
    int a = 5;  // 初項 5
    int d = 3;  // 公差 3
    int n = 10; // 項数 10
    long p = 1; // 積

    int i;
    for (i = 1; i <= n; i++)
    {
        int m = a + (d * (i - 1));
        p *= m;
    }    
    printf("%ld\n", p);

    return 0;
}
Compiling the source code....
$gcc `gnustep-config --objc-flags` -L/usr/GNUstep/System/Library/Libraries -lgnustep-base main.m -o demo -lm -pthread -lgmpxx -lreadline 2>&1

Executing the program....
$demo
1162274713600

D

Go

Scala

対話型実行環境を起動

Z:\>scala
Welcome to Scala version 2.10.2 (Java HotSpot(TM) Client VM, Java 1.7.0_21).
Type in expressions to have them evaluated.
Type :help for more information.

項数 10 の数列

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

初項 5, 公差 3, 項数 10 の数列

(0 to 9).map(n => n * 3 + 5)
res1: scala.collection.immutable.IndexedSeq[Int] = Vector(5, 8, 11, 14, 17, 20, 23, 26, 29, 32)

初項 5, 公差 3, 項数 10 の数列の積

(0l to 9l).map(n => n * 3 + 5).product
res2: Long = 1162274713600

終了

scala> :quit

F#

対話型実行環境を起動

Z:\>fsi
Welcome to Scala version 2.10.2 (Java HotSpot(TM) Client VM, Java 1.7.0_21).
Type in expressions to have them evaluated.
Type :help for more information.

項数 10 の数列

[0..9]
val it : int list = [0; 1; 2; 3; 4; 5; 6; 7; 8; 9]

初項 5, 公差 3, 項数 10 の数列

[0..9]
|> List.map (fun n -> n * 3 + 5)
val it : int list = [5; 8; 11; 14; 17; 20; 23; 26; 29; 32]

初項 5, 公差 3, 項数 10 の数列の積

[0L..9L]
|> List.map (fun n -> n * 3L + 5L)
|> List.reduce(*)
val it : int64 = 1162274713600L

終了

> #quit;;

Clojure

対話型実行環境を起動

Z:\>java -cp C:\ProgramFiles\clojure-1.5.1\clojure-1.5.1.jar clojure.main
Clojure 1.5.1

項数 10 の数列

(range 0 10)
(0 1 2 3 4 5 6 7 8 9)

初項 5, 公差 3, 項数 10 の数列

(map 
    #(+ 5 (* 3 %))
    (range 0 10))
(5 8 11 14 17 20 23 26 29 32)

初項 5, 公差 3, 項数 10 の数列の積

(apply *
    (map 
        #(+ 5 (* 3 %))
        (range 0 10)))
1162274713600

終了

user=> (. System exit 0)

Haskell

対話型実行環境を起動

Z:\>ghci
GHCi, version 7.6.3: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.

項数 10 の数列

[0..9]
[0,1,2,3,4,5,6,7,8,9]

初項 5, 公差 3, 項数 10 の数列

map(\n -> n * 3 + 5)[0..9]
[5,8,11,14,17,20,23,26,29,32]

初項 5, 公差 3, 項数 10 の数列の積

product $ map(\n -> n * 3 + 5)[0..9]
1162274713600

終了

Prelude> :quit
Leaving GHCi.
inserted by FC2 system