home > 写経編 > 柴田望洋『明解C言語 入門編』 > 5. 配列 >

ForNext

Only Do What Only You Can Do

042. 素数を求める (ver.5)

VBScript

JScript

Perl

更新日 : 2010.10.18
@prime   = ();
$ptr     = 0;
$counter = 0;

$prime[$ptr++] = 2;
$prime[$ptr++] = 3;

$no = 5;
while ($no <= 30)
{
    $j = 0;
    for ($i = 1; $counter++, $prime[$i] * $prime[$i] <= $no; $i++)
    {
        $counter++;
        if ($no % $prime[$i] == 0)
        {
            $j = 1;
            last; # 割り切れるので、素数ではない
        }
    }
    $prime[$ptr++] = $no unless ($j); # 最後まで割り切れなかったので、素数

    $no += 2;
}

foreach $p(@prime)
{
    print "$p\n";
}    

print "計算を行った回数:$counter\n";
L:\>perl lesson_05_042.pl
2
3
5
7
11
13
17
19
23
29
計算を行った回数:34

PHP

更新日 : 2010.11.03
<?php
$prime   = array();
$ptr     = 0;
$counter = 0;

$prime[$ptr++] = 2;
$prime[$ptr++] = 3;

$no = 5;
while ($no <= 30)
{
    $j = 0;
    for ($i = 1; $counter++, $prime[$i] * $prime[$i] <= $no; $i++)
    {
        $counter++;
        if ($no % $prime[$i] == 0)
        {
            $j = 1;
            break; # 割り切れるので、素数ではない
        }
    }
    if (!$j) $prime[$ptr++] = $no ; # 最後まで割り切れなかったので、素数

    $no += 2;
}

foreach ($prime as $p)
{
    print "$p\n";
}    

print "計算を行った回数:$counter\n";
?>
L:\>php lesson_05_042.php
2
3
5
7
11
13
17
19
23
29
計算を行った回数:34

Python

更新日 : 2010.11.17
# coding: Shift_JIS

prime    = [] # range(15)
prime.append(2)
prime.append(3)
ptr      = 2

counter = 0
no      = 5
while (no <= 30):
    j = 0
    i = 1
    while True:
        counter += 1
        if (prime[i] * prime[i] > no):
            break 

        counter += 1
        if (no % prime[i] == 0):
            j = 1
            break # 割り切れるので、素数ではない
        i += 1

    if j == 0:
        prime.append(no) # 最後まで割り切れなかったので、素数
        ptr += 1

    no += 2

for p in prime:
    print p

print "計算を行った回数:%d" % counter
N:\>python lesson_05_042.py
2
3
5
7
11
13
17
19
23
29
計算を行った回数:34

Ruby

更新日 : 2010.11.01
prime   = []
counter = 0

prime[0] = 2
prime[1] = 3
ptr      = 2

no = 5
while (no <= 30)
    j = 0
    i = 1
    loop do
        counter += 1
        break if (prime[i] * prime[i] > no)

        counter += 1
        if (no % prime[i] == 0)
            j = 1
            break # 割り切れるので、素数ではない
        end
        i += 1
    end

    if (j == 0)
        prime[ptr] = no  # 最後まで割り切れなかったので、素数
        ptr += 1
    end

    no  += 2
end

prime.each do |p|
    print "#{p}\n"
end    

print "計算を行った回数:#{counter}\n"
L:\>ruby  l:\lesson_05_042.rb
2
3
5
7
11
13
17
19
23
29
計算を行った回数:34

PowerShell

Scala

F#

C

更新日 : 2010.10.08
#include <stdio.h>
int main(int argc, char* argv[])
{
    int i, no;
    int prime[15];
    int ptr = 0;
    unsigned long counter = 0;

    prime[ptr++] = 2;
    prime[ptr++] = 3;

    for (no = 5; no <= 30; no += 2)
    {
        int j = 0;
        for (i = 1; counter++, prime[i] * prime[i] <= no; i++)
        {
            counter++;
            if (no % prime[i] == 0)
            {
                j = 1;
                break; /* 割り切れるので、素数ではない */
            }
        }
        if (!j)
            prime[ptr++] = no; /* 最後まで割り切れなかったので、素数 */
    }

    for (i = 0; i < ptr; i++)
        printf("%d\n", prime[i]);

    printf("計算を行った回数:%lu\n", counter);

    return 0;
}
R:\>lesson042\project1.exe
2
3
5
7
11
13
17
19
23
29
計算を行った回数:34

C++

C++Builder

VC++

C#

Java

更新日 : 2010.11.05
class Lesson042
{
    public static void main(String[] args) {

        int ptr = 0;
        int[] prime = new int[15];
        prime[ptr++] = 2;
        prime[ptr++] = 3;

        long counter = 0;

        for (int no = 5; no <= 30; no += 2)
        {
            int i = 1;
            int j = 0;
            while (true)
            {
                counter++;
                if (prime[i] * prime[i] > no) break;

                counter++;
                if (no % prime[i] == 0)
                {
                    j = 1;
                    break; // 割り切れるので、素数ではない
                }
                i++;
            }
            if (j == 0)
                prime[ptr++] = no; // 最後まで割り切れなかったので、素数
        }

        for (int i = 0; i < ptr; i++)
            System.out.printf("%d\n", prime[i]);

        System.out.printf("計算を行った回数:%d\n", counter);
    }
}
L:\>java Lesson042
2
3
5
7
11
13
17
19
23
29
計算を行った回数:34

Objective-C

D

VB

VB.NET

Delphi

更新日 : 2010.09.24
program Project1;

{$APPTYPE CONSOLE}

uses
    SysUtils;
var
    i, j, no: Integer;
    prime: array[0..14] of Integer;
    ptr:      Integer = 0;
    counter:  Integer = 0;
begin
    prime[ptr] := 2;
    inc(ptr);

    prime[ptr] := 3;
    inc(ptr);

    no := 5;
    while (no <= 30) do
    begin
        j := 0;

        i := 1;
        while (true) do
        begin
            inc(counter);
            if (prime[i] * prime[i] > no) then
                break;

            inc(counter);
            if (no mod prime[i] = 0) then
            begin
                j := 1;
                break; { 割り切れるので、素数ではない }
            end;

            inc(i);
        end;

        if j = 0 then
        begin
            prime[ptr] := no; { 最後まで割り切れなかったので、素数 }
            inc(ptr);
        end;

        no := no + 2;
    end;

    for i := 0 to ptr - 1 do
    begin
        writeln(format('%d', [prime[i]]));
    end;
    writeln(format('計算を行った回数:%d', [counter]));
end.
S:\>lesson042\project1.exe
2
3
5
7
11
13
17
19
23
29
計算を行った回数:34

Ada

PL/SQL

T-SQL

関数型

inserted by FC2 system