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