Home > Memo > 2003-04-14

素数ジェネレーターの動作をみてみる

 perlthrtutの「完全な例」に出てくる素数生成プログラムの動作を追ってみる。なんとなくスレッドの雰囲気がわかる……といえるのか?

こんな感じで

 単にオリジナルにコメント出力させているだけ。


#!/usr/bin/perl -w
#==============================================================================
# perlthrtutA Complete Example に載っている
# prime-pthread( by Tom Christiansen ) を改造.
# 著作権等の詳細は perlthrtut で確認ください。
#==============================================================================
$| = 1;
use strict;
use threads;
use Thread::Queue;
#==============================================================================
main();
sub main{
	my $stream = new Thread::Queue;
	my $kid    = new threads(\&check_num, $stream, 2);
	my $max    = $ARGV[0] || 20;

	if   ($max =~ /\D/){ die "Not numeric.\n"}
	elsif($max < 0){ die "Not plus.\n"}

	print "---- $max までの正の整数から素数を探します ----\n";

	for my $i ( 3 .. $max ) {
	    $stream->enqueue($i);
	}

	$stream->enqueue(undef);
	$kid->join;

	print "---- 終了 ----\n";
}
#==============================================================================
sub check_num {
	my ($upstream, $cur_prime) = @_;
	my $kid;
	my $downstream = new Thread::Queue;
	my $myid = threads->self->tid();

	print "[スレッド$myid]: 私は素数 $cur_prime を受け持つID番号 " . $myid . "のスレッドです。\n";

	while (my $num = $upstream->dequeue) {
		print "[スレッド$myid]: $num を $cur_prime で割ります…";
		if( !($num % $cur_prime) ){
			print "おや、割り切れたので $num は素数ではありません。\n";
			next;
		}
		else{
			print "割り切れません。 ";
		}
		if ($kid){
			print "では子スレッド(" . $kid->tid() . ")へ $num を Enqueue します。\n";
			$downstream->enqueue($num);
		}
		else{
			print "これより小さい素数で割り切れなかったので $num は素数です。\n";
			print "[スレッド$myid]: ";
			print "素数 $numを受け持つ子スレッド(" . ($myid + 1) . ")を生成します。\n";
			$kid = new threads(\&check_num, $downstream, $num);
		}
	} 
	if($kid){
		$downstream->enqueue(undef);
		print "[スレッド$myid]: ";
		print "待機に入ります。\n";
		$kid->join;
	}

	print "[スレッド$myid]: ";
	print "私の仕事は終了しました。\n";
}
#==============================================================================

こんな出力

 動作環境は Red Hat 8.0, perl 5.8.0

$ ./prime_jp.pl 100 > prime.txt

---- 100 までの正の整数から素数を探します ----
[スレッド1]: 私は素数 2 を受け持つID番号 1のスレッドです。
[スレッド1]: 3 を 2 で割ります…割り切れません。 これより小さい素数で割り切れなかったので 3 は素数です。
[スレッド1]: 素数 3を受け持つ子スレッド(2)を生成します。
[スレッド2]: 私は素数 3 を受け持つID番号 2のスレッドです。
[スレッド1]: 4 を 2 で割ります…おや、割り切れたので 4 は素数ではありません。
[スレッド1]: 5 を 2 で割ります…割り切れません。 では子スレッド(2)へ 5 を Enqueue します。
[スレッド2]: 5 を 3 で割ります…割り切れません。 これより小さい素数で割り切れなかったので 5 は素数です。
[スレッド2]: 素数 5を受け持つ子スレッド(3)を生成します。
[スレッド3]: 私は素数 5 を受け持つID番号 3のスレッドです。
[スレッド1]: 6 を 2 で割ります…おや、割り切れたので 6 は素数ではありません。
[スレッド1]: 7 を 2 で割ります…割り切れません。 では子スレッド(2)へ 7 を Enqueue します。
[スレッド1]: 8 を 2 で割ります…おや、割り切れたので 8 は素数ではありません。
[スレッド1]: 9 を 2 で割ります…割り切れません。 では子スレッド(2)へ 9 を Enqueue します。
[スレッド1]: 10 を 2 で割ります…おや、割り切れたので 10 は素数ではありません。
[スレッド1]: 11 を 2 で割ります…割り切れません。 では子スレッド(2)へ 11 を Enqueue します。
[スレッド1]: 12 を 2 で割ります…おや、割り切れたので 12 は素数ではありません。
[スレッド1]: 13 を 2 で割ります…割り切れません。 では子スレッド(2)へ 13 を Enqueue します。
[スレッド1]: 14 を 2 で割ります…おや、割り切れたので 14 は素数ではありません。
[スレッド1]: 15 を 2 で割ります…割り切れません。 では子スレッド(2)へ 15 を Enqueue します。
[スレッド1]: 16 を 2 で割ります…おや、割り切れたので 16 は素数ではありません。
[スレッド1]: 17 を 2 で割ります…割り切れません。 では子スレッド(2)へ 17 を Enqueue します。
[スレッド1]: 18 を 2 で割ります…おや、割り切れたので 18 は素数ではありません。
[スレッド1]: 19 を 2 で割ります…割り切れません。 では子スレッド(2)へ 19 を Enqueue します。
[スレッド1]: 20 を 2 で割ります…おや、割り切れたので 20 は素数ではありません。
[スレッド1]: 21 を 2 で割ります…割り切れません。 では子スレッド(2)へ 21 を Enqueue します。
[スレッド1]: 22 を 2 で割ります…おや、割り切れたので 22 は素数ではありません。
[スレッド1]: 23 を 2 で割ります…割り切れません。 では子スレッド(2)へ 23 を Enqueue します。
[スレッド1]: 24 を 2 で割ります…おや、割り切れたので 24 は素数ではありません。
[スレッド1]: 25 を 2 で割ります…割り切れません。 では子スレッド(2)へ 25 を Enqueue します。
[スレッド1]: 26 を 2 で割ります…おや、割り切れたので 26 は素数ではありません。
[スレッド1]: 27 を 2 で割ります…割り切れません。 では子スレッド(2)へ 27 を Enqueue します。
[スレッド1]: 28 を 2 で割ります…おや、割り切れたので 28 は素数ではありません。
[スレッド1]: 29 を 2 で割ります…割り切れません。 では子スレッド(2)へ 29 を Enqueue します。
[スレッド1]: 30 を 2 で割ります…おや、割り切れたので 30 は素数ではありません。
[スレッド1]: 31 を 2 で割ります…割り切れません。 では子スレッド(2)へ 31 を Enqueue します。
[スレッド1]: 32 を 2 で割ります…おや、割り切れたので 32 は素数ではありません。
[スレッド1]: 33 を 2 で割ります…割り切れません。 では子スレッド(2)へ 33 を Enqueue します。
[スレッド1]: 34 を 2 で割ります…おや、割り切れたので 34 は素数ではありません。
[スレッド1]: 35 を 2 で割ります…割り切れません。 では子スレッド(2)へ 35 を Enqueue します。
[スレッド1]: 36 を 2 で割ります…おや、割り切れたので 36 は素数ではありません。
[スレッド1]: 37 を 2 で割ります…割り切れません。 では子スレッド(2)へ 37 を Enqueue します。
[スレッド1]: 38 を 2 で割ります…おや、割り切れたので 38 は素数ではありません。
[スレッド1]: 39 を 2 で割ります…割り切れません。 では子スレッド(2)へ 39 を Enqueue します。
[スレッド1]: 40 を 2 で割ります…おや、割り切れたので 40 は素数ではありません。
[スレッド1]: 41 を 2 で割ります…割り切れません。 では子スレッド(2)へ 41 を Enqueue します。
[スレッド1]: 42 を 2 で割ります…おや、割り切れたので 42 は素数ではありません。
[スレッド1]: 43 を 2 で割ります…割り切れません。 では子スレッド(2)へ 43 を Enqueue します。
[スレッド1]: 44 を 2 で割ります…おや、割り切れたので 44 は素数ではありません。
[スレッド1]: 45 を 2 で割ります…割り切れません。 では子スレッド(2)へ 45 を Enqueue します。
[スレッド1]: 46 を 2 で割ります…おや、割り切れたので 46 は素数ではありません。
[スレッド1]: 47 を 2 で割ります…割り切れません。 では子スレッド(2)へ 47 を Enqueue します。
[スレッド1]: 48 を 2 で割ります…おや、割り切れたので 48 は素数ではありません。
[スレッド1]: 49 を 2 で割ります…割り切れません。 では子スレッド(2)へ 49 を Enqueue します。
[スレッド1]: 50 を 2 で割ります…おや、割り切れたので 50 は素数ではありません。
[スレッド1]: 51 を 2 で割ります…割り切れません。 では子スレッド(2)へ 51 を Enqueue します。
[スレッド1]: 52 を 2 で割ります…おや、割り切れたので 52 は素数ではありません。
[スレッド1]: 53 を 2 で割ります…割り切れません。 では子スレッド(2)へ 53 を Enqueue します。
[スレッド1]: 54 を 2 で割ります…おや、割り切れたので 54 は素数ではありません。
[スレッド1]: 55 を 2 で割ります…割り切れません。 では子スレッド(2)へ 55 を Enqueue します。
[スレッド1]: 56 を 2 で割ります…おや、割り切れたので 56 は素数ではありません。
[スレッド1]: 57 を 2 で割ります…割り切れません。 では子スレッド(2)へ 57 を Enqueue します。
[スレッド1]: 58 を 2 で割ります…おや、割り切れたので 58 は素数ではありません。
[スレッド1]: 59 を 2 で割ります…割り切れません。 では子スレッド(2)へ 59 を Enqueue します。
[スレッド1]: 60 を 2 で割ります…おや、割り切れたので 60 は素数ではありません。
[スレッド1]: 61 を 2 で割ります…割り切れません。 では子スレッド(2)へ 61 を Enqueue します。
[スレッド1]: 62 を 2 で割ります…おや、割り切れたので 62 は素数ではありません。
[スレッド1]: 63 を 2 で割ります…割り切れません。 では子スレッド(2)へ 63 を Enqueue します。
[スレッド1]: 64 を 2 で割ります…おや、割り切れたので 64 は素数ではありません。
[スレッド1]: 65 を 2 で割ります…割り切れません。 では子スレッド(2)へ 65 を Enqueue します。
[スレッド1]: 66 を 2 で割ります…おや、割り切れたので 66 は素数ではありません。
[スレッド1]: 67 を 2 で割ります…割り切れません。 では子スレッド(2)へ 67 を Enqueue します。
[スレッド1]: 68 を 2 で割ります…おや、割り切れたので 68 は素数ではありません。
[スレッド1]: 69 を 2 で割ります…割り切れません。 では子スレッド(2)へ 69 を Enqueue します。
[スレッド1]: 70 を 2 で割ります…おや、割り切れたので 70 は素数ではありません。
[スレッド1]: 71 を 2 で割ります…割り切れません。 では子スレッド(2)へ 71 を Enqueue します。
[スレッド1]: 72 を 2 で割ります…おや、割り切れたので 72 は素数ではありません。
[スレッド1]: 73 を 2 で割ります…割り切れません。 では子スレッド(2)へ 73 を Enqueue します。
[スレッド1]: 74 を 2 で割ります…おや、割り切れたので 74 は素数ではありません。
[スレッド1]: 75 を 2 で割ります…割り切れません。 では子スレッド(2)へ 75 を Enqueue します。
[スレッド1]: 76 を 2 で割ります…おや、割り切れたので 76 は素数ではありません。
[スレッド1]: 77 を 2 で割ります…割り切れません。 では子スレッド(2)へ 77 を Enqueue します。
[スレッド1]: 78 を 2 で割ります…おや、割り切れたので 78 は素数ではありません。
[スレッド1]: 79 を 2 で割ります…割り切れません。 では子スレッド(2)へ 79 を Enqueue します。
[スレッド1]: 80 を 2 で割ります…おや、割り切れたので 80 は素数ではありません。
[スレッド1]: 81 を 2 で割ります…割り切れません。 では子スレッド(2)へ 81 を Enqueue します。
[スレッド1]: 82 を 2 で割ります…おや、割り切れたので 82 は素数ではありません。
[スレッド1]: 83 を 2 で割ります…割り切れません。 では子スレッド(2)へ 83 を Enqueue します。
[スレッド1]: 84 を 2 で割ります…おや、割り切れたので 84 は素数ではありません。
[スレッド1]: 85 を 2 で割ります…割り切れません。 では子スレッド(2)へ 85 を Enqueue します。
[スレッド1]: 86 を 2 で割ります…おや、割り切れたので 86 は素数ではありません。
[スレッド1]: 87 を 2 で割ります…割り切れません。 では子スレッド(2)へ 87 を Enqueue します。
[スレッド1]: 88 を 2 で割ります…おや、割り切れたので 88 は素数ではありません。
[スレッド1]: 89 を 2 で割ります…割り切れません。 では子スレッド(2)へ 89 を Enqueue します。
[スレッド1]: 90 を 2 で割ります…おや、割り切れたので 90 は素数ではありません。
[スレッド1]: 91 を 2 で割ります…割り切れません。 では子スレッド(2)へ 91 を Enqueue します。
[スレッド1]: 92 を 2 で割ります…おや、割り切れたので 92 は素数ではありません。
[スレッド1]: 93 を 2 で割ります…割り切れません。 では子スレッド(2)へ 93 を Enqueue します。
[スレッド1]: 94 を 2 で割ります…おや、割り切れたので 94 は素数ではありません。
[スレッド1]: 95 を 2 で割ります…割り切れません。 では子スレッド(2)へ 95 を Enqueue します。
[スレッド1]: 96 を 2 で割ります…おや、割り切れたので 96 は素数ではありません。
[スレッド1]: 97 を 2 で割ります…割り切れません。 では子スレッド(2)へ 97 を Enqueue します。
[スレッド1]: 98 を 2 で割ります…おや、割り切れたので 98 は素数ではありません。
[スレッド1]: 99 を 2 で割ります…割り切れません。 では子スレッド(2)へ 99 を Enqueue します。
[スレッド1]: 100 を 2 で割ります…おや、割り切れたので 100 は素数ではありません。
[スレッド1]: 待機に入ります。
[スレッド2]: 7 を 3 で割ります…割り切れません。 では子スレッド(3)へ 7 を Enqueue します。
[スレッド3]: 7 を 5 で割ります…割り切れません。 これより小さい素数で割り切れなかったので 7 は素数です。
[スレッド3]: 素数 7を受け持つ子スレッド(4)を生成します。
[スレッド4]: 私は素数 7 を受け持つID番号 4のスレッドです。
[スレッド2]: 9 を 3 で割ります…おや、割り切れたので 9 は素数ではありません。
[スレッド2]: 11 を 3 で割ります…割り切れません。 では子スレッド(3)へ 11 を Enqueue します。
[スレッド3]: 11 を 5 で割ります…割り切れません。 では子スレッド(4)へ 11 を Enqueue します。
[スレッド4]: 11 を 7 で割ります…割り切れません。 これより小さい素数で割り切れなかったので 11 は素数です。
[スレッド4]: 素数 11を受け持つ子スレッド(5)を生成します。
[スレッド5]: 私は素数 11 を受け持つID番号 5のスレッドです。
[スレッド2]: 13 を 3 で割ります…割り切れません。 では子スレッド(3)へ 13 を Enqueue します。
[スレッド3]: 13 を 5 で割ります…割り切れません。 では子スレッド(4)へ 13 を Enqueue します。
[スレッド4]: 13 を 7 で割ります…割り切れません。 では子スレッド(5)へ 13 を Enqueue します。
[スレッド5]: 13 を 11 で割ります…割り切れません。 これより小さい素数で割り切れなかったので 13 は素数です。
[スレッド5]: 素数 13を受け持つ子スレッド(6)を生成します。
[スレッド6]: 私は素数 13 を受け持つID番号 6のスレッドです。
[スレッド2]: 15 を 3 で割ります…おや、割り切れたので 15 は素数ではありません。
[スレッド2]: 17 を 3 で割ります…割り切れません。 では子スレッド(3)へ 17 を Enqueue します。
[スレッド3]: 17 を 5 で割ります…割り切れません。 では子スレッド(4)へ 17 を Enqueue します。
[スレッド4]: 17 を 7 で割ります…割り切れません。 では子スレッド(5)へ 17 を Enqueue します。
[スレッド5]: 17 を 11 で割ります…割り切れません。 では子スレッド(6)へ 17 を Enqueue します。
[スレッド6]: 17 を 13 で割ります…割り切れません。 これより小さい素数で割り切れなかったので 17 は素数です。
[スレッド6]: 素数 17を受け持つ子スレッド(7)を生成します。
[スレッド7]: 私は素数 17 を受け持つID番号 7のスレッドです。
[スレッド2]: 19 を 3 で割ります…割り切れません。 では子スレッド(3)へ 19 を Enqueue します。
[スレッド3]: 19 を 5 で割ります…割り切れません。 では子スレッド(4)へ 19 を Enqueue します。
[スレッド4]: 19 を 7 で割ります…割り切れません。 では子スレッド(5)へ 19 を Enqueue します。
[スレッド5]: 19 を 11 で割ります…割り切れません。 では子スレッド(6)へ 19 を Enqueue します。
[スレッド6]: 19 を 13 で割ります…割り切れません。 では子スレッド(7)へ 19 を Enqueue します。
[スレッド7]: 19 を 17 で割ります…割り切れません。 これより小さい素数で割り切れなかったので 19 は素数です。
[スレッド7]: 素数 19を受け持つ子スレッド(8)を生成します。
[スレッド8]: 私は素数 19 を受け持つID番号 8のスレッドです。
[スレッド2]: 21 を 3 で割ります…おや、割り切れたので 21 は素数ではありません。
[スレッド2]: 23 を 3 で割ります…割り切れません。 では子スレッド(3)へ 23 を Enqueue します。
[スレッド3]: 23 を 5 で割ります…割り切れません。 では子スレッド(4)へ 23 を Enqueue します。
[スレッド4]: 23 を 7 で割ります…割り切れません。 では子スレッド(5)へ 23 を Enqueue します。
[スレッド5]: 23 を 11 で割ります…割り切れません。 では子スレッド(6)へ 23 を Enqueue します。
[スレッド6]: 23 を 13 で割ります…割り切れません。 では子スレッド(7)へ 23 を Enqueue します。
[スレッド7]: 23 を 17 で割ります…割り切れません。 では子スレッド(8)へ 23 を Enqueue します。
[スレッド8]: 23 を 19 で割ります…割り切れません。 これより小さい素数で割り切れなかったので 23 は素数です。
[スレッド8]: 素数 23を受け持つ子スレッド(9)を生成します。
[スレッド9]: 私は素数 23 を受け持つID番号 9のスレッドです。
[スレッド2]: 25 を 3 で割ります…割り切れません。 では子スレッド(3)へ 25 を Enqueue します。
[スレッド3]: 25 を 5 で割ります…おや、割り切れたので 25 は素数ではありません。
[スレッド2]: 27 を 3 で割ります…おや、割り切れたので 27 は素数ではありません。
[スレッド2]: 29 を 3 で割ります…割り切れません。 では子スレッド(3)へ 29 を Enqueue します。
[スレッド3]: 29 を 5 で割ります…割り切れません。 では子スレッド(4)へ 29 を Enqueue します。
[スレッド4]: 29 を 7 で割ります…割り切れません。 では子スレッド(5)へ 29 を Enqueue します。
[スレッド5]: 29 を 11 で割ります…割り切れません。 では子スレッド(6)へ 29 を Enqueue します。
[スレッド6]: 29 を 13 で割ります…割り切れません。 では子スレッド(7)へ 29 を Enqueue します。
[スレッド7]: 29 を 17 で割ります…割り切れません。 では子スレッド(8)へ 29 を Enqueue します。
[スレッド8]: 29 を 19 で割ります…割り切れません。 では子スレッド(9)へ 29 を Enqueue します。
[スレッド9]: 29 を 23 で割ります…割り切れません。 これより小さい素数で割り切れなかったので 29 は素数です。
[スレッド9]: 素数 29を受け持つ子スレッド(10)を生成します。
[スレッド10]: 私は素数 29 を受け持つID番号 10のスレッドです。
[スレッド2]: 31 を 3 で割ります…割り切れません。 では子スレッド(3)へ 31 を Enqueue します。
[スレッド3]: 31 を 5 で割ります…割り切れません。 では子スレッド(4)へ 31 を Enqueue します。
[スレッド4]: 31 を 7 で割ります…割り切れません。 では子スレッド(5)へ 31 を Enqueue します。
[スレッド5]: 31 を 11 で割ります…割り切れません。 では子スレッド(6)へ 31 を Enqueue します。
[スレッド6]: 31 を 13 で割ります…割り切れません。 では子スレッド(7)へ 31 を Enqueue します。
[スレッド7]: 31 を 17 で割ります…割り切れません。 では子スレッド(8)へ 31 を Enqueue します。
[スレッド8]: 31 を 19 で割ります…割り切れません。 では子スレッド(9)へ 31 を Enqueue します。
[スレッド9]: 31 を 23 で割ります…割り切れません。 では子スレッド(10)へ 31 を Enqueue します。
[スレッド10]: 31 を 29 で割ります…割り切れません。 これより小さい素数で割り切れなかったので 31 は素数です。
[スレッド10]: 素数 31を受け持つ子スレッド(11)を生成します。
[スレッド11]: 私は素数 31 を受け持つID番号 11のスレッドです。
[スレッド2]: 33 を 3 で割ります…おや、割り切れたので 33 は素数ではありません。
[スレッド2]: 35 を 3 で割ります…割り切れません。 では子スレッド(3)へ 35 を Enqueue します。
[スレッド3]: 35 を 5 で割ります…おや、割り切れたので 35 は素数ではありません。
[スレッド2]: 37 を 3 で割ります…割り切れません。 では子スレッド(3)へ 37 を Enqueue します。
[スレッド3]: 37 を 5 で割ります…割り切れません。 では子スレッド(4)へ 37 を Enqueue します。
[スレッド4]: 37 を 7 で割ります…割り切れません。 では子スレッド(5)へ 37 を Enqueue します。
[スレッド5]: 37 を 11 で割ります…割り切れません。 では子スレッド(6)へ 37 を Enqueue します。
[スレッド6]: 37 を 13 で割ります…割り切れません。 では子スレッド(7)へ 37 を Enqueue します。
[スレッド7]: 37 を 17 で割ります…割り切れません。 では子スレッド(8)へ 37 を Enqueue します。
[スレッド8]: 37 を 19 で割ります…割り切れません。 では子スレッド(9)へ 37 を Enqueue します。
[スレッド9]: 37 を 23 で割ります…割り切れません。 では子スレッド(10)へ 37 を Enqueue します。
[スレッド10]: 37 を 29 で割ります…割り切れません。 では子スレッド(11)へ 37 を Enqueue します。
[スレッド11]: 37 を 31 で割ります…割り切れません。 これより小さい素数で割り切れなかったので 37 は素数です。
[スレッド11]: 素数 37を受け持つ子スレッド(12)を生成します。
[スレッド12]: 私は素数 37 を受け持つID番号 12のスレッドです。
[スレッド2]: 39 を 3 で割ります…おや、割り切れたので 39 は素数ではありません。
[スレッド2]: 41 を 3 で割ります…割り切れません。 では子スレッド(3)へ 41 を Enqueue します。
[スレッド3]: 41 を 5 で割ります…割り切れません。 では子スレッド(4)へ 41 を Enqueue します。
[スレッド4]: 41 を 7 で割ります…割り切れません。 では子スレッド(5)へ 41 を Enqueue します。
[スレッド5]: 41 を 11 で割ります…割り切れません。 では子スレッド(6)へ 41 を Enqueue します。
[スレッド6]: 41 を 13 で割ります…割り切れません。 では子スレッド(7)へ 41 を Enqueue します。
[スレッド7]: 41 を 17 で割ります…割り切れません。 では子スレッド(8)へ 41 を Enqueue します。
[スレッド8]: 41 を 19 で割ります…割り切れません。 では子スレッド(9)へ 41 を Enqueue します。
[スレッド9]: 41 を 23 で割ります…割り切れません。 では子スレッド(10)へ 41 を Enqueue します。
[スレッド10]: 41 を 29 で割ります…割り切れません。 では子スレッド(11)へ 41 を Enqueue します。
[スレッド11]: 41 を 31 で割ります…割り切れません。 では子スレッド(12)へ 41 を Enqueue します。
[スレッド12]: 41 を 37 で割ります…割り切れません。 これより小さい素数で割り切れなかったので 41 は素数です。
[スレッド12]: 素数 41を受け持つ子スレッド(13)を生成します。
[スレッド13]: 私は素数 41 を受け持つID番号 13のスレッドです。
[スレッド2]: 43 を 3 で割ります…割り切れません。 では子スレッド(3)へ 43 を Enqueue します。
[スレッド3]: 43 を 5 で割ります…割り切れません。 では子スレッド(4)へ 43 を Enqueue します。
[スレッド4]: 43 を 7 で割ります…割り切れません。 では子スレッド(5)へ 43 を Enqueue します。
[スレッド5]: 43 を 11 で割ります…割り切れません。 では子スレッド(6)へ 43 を Enqueue します。
[スレッド6]: 43 を 13 で割ります…割り切れません。 では子スレッド(7)へ 43 を Enqueue します。
[スレッド7]: 43 を 17 で割ります…割り切れません。 では子スレッド(8)へ 43 を Enqueue します。
[スレッド8]: 43 を 19 で割ります…割り切れません。 では子スレッド(9)へ 43 を Enqueue します。
[スレッド9]: 43 を 23 で割ります…割り切れません。 では子スレッド(10)へ 43 を Enqueue します。
[スレッド10]: 43 を 29 で割ります…割り切れません。 では子スレッド(11)へ 43 を Enqueue します。
[スレッド11]: 43 を 31 で割ります…割り切れません。 では子スレッド(12)へ 43 を Enqueue します。
[スレッド12]: 43 を 37 で割ります…割り切れません。 では子スレッド(13)へ 43 を Enqueue します。
[スレッド13]: 43 を 41 で割ります…割り切れません。 これより小さい素数で割り切れなかったので 43 は素数です。
[スレッド13]: 素数 43を受け持つ子スレッド(14)を生成します。
[スレッド14]: 私は素数 43 を受け持つID番号 14のスレッドです。
[スレッド2]: 45 を 3 で割ります…おや、割り切れたので 45 は素数ではありません。
[スレッド2]: 47 を 3 で割ります…割り切れません。 では子スレッド(3)へ 47 を Enqueue します。
[スレッド3]: 47 を 5 で割ります…割り切れません。 では子スレッド(4)へ 47 を Enqueue します。
[スレッド4]: 47 を 7 で割ります…割り切れません。 では子スレッド(5)へ 47 を Enqueue します。
[スレッド5]: 47 を 11 で割ります…割り切れません。 では子スレッド(6)へ 47 を Enqueue します。
[スレッド6]: 47 を 13 で割ります…割り切れません。 では子スレッド(7)へ 47 を Enqueue します。
[スレッド7]: 47 を 17 で割ります…割り切れません。 では子スレッド(8)へ 47 を Enqueue します。
[スレッド8]: 47 を 19 で割ります…割り切れません。 では子スレッド(9)へ 47 を Enqueue します。
[スレッド9]: 47 を 23 で割ります…割り切れません。 では子スレッド(10)へ 47 を Enqueue します。
[スレッド10]: 47 を 29 で割ります…割り切れません。 では子スレッド(11)へ 47 を Enqueue します。
[スレッド11]: 47 を 31 で割ります…割り切れません。 では子スレッド(12)へ 47 を Enqueue します。
[スレッド12]: 47 を 37 で割ります…割り切れません。 では子スレッド(13)へ 47 を Enqueue します。
[スレッド13]: 47 を 41 で割ります…割り切れません。 では子スレッド(14)へ 47 を Enqueue します。
[スレッド14]: 47 を 43 で割ります…割り切れません。 これより小さい素数で割り切れなかったので 47 は素数です。
[スレッド14]: 素数 47を受け持つ子スレッド(15)を生成します。
[スレッド15]: 私は素数 47 を受け持つID番号 15のスレッドです。
[スレッド2]: 49 を 3 で割ります…割り切れません。 では子スレッド(3)へ 49 を Enqueue します。
[スレッド3]: 49 を 5 で割ります…割り切れません。 では子スレッド(4)へ 49 を Enqueue します。
[スレッド4]: 49 を 7 で割ります…おや、割り切れたので 49 は素数ではありません。
[スレッド2]: 51 を 3 で割ります…おや、割り切れたので 51 は素数ではありません。
[スレッド2]: 53 を 3 で割ります…割り切れません。 では子スレッド(3)へ 53 を Enqueue します。
[スレッド3]: 53 を 5 で割ります…割り切れません。 では子スレッド(4)へ 53 を Enqueue します。
[スレッド4]: 53 を 7 で割ります…割り切れません。 では子スレッド(5)へ 53 を Enqueue します。
[スレッド5]: 53 を 11 で割ります…割り切れません。 では子スレッド(6)へ 53 を Enqueue します。
[スレッド6]: 53 を 13 で割ります…割り切れません。 では子スレッド(7)へ 53 を Enqueue します。
[スレッド7]: 53 を 17 で割ります…割り切れません。 では子スレッド(8)へ 53 を Enqueue します。
[スレッド8]: 53 を 19 で割ります…割り切れません。 では子スレッド(9)へ 53 を Enqueue します。
[スレッド9]: 53 を 23 で割ります…割り切れません。 では子スレッド(10)へ 53 を Enqueue します。
[スレッド10]: 53 を 29 で割ります…割り切れません。 では子スレッド(11)へ 53 を Enqueue します。
[スレッド11]: 53 を 31 で割ります…割り切れません。 では子スレッド(12)へ 53 を Enqueue します。
[スレッド12]: 53 を 37 で割ります…割り切れません。 では子スレッド(13)へ 53 を Enqueue します。
[スレッド13]: 53 を 41 で割ります…割り切れません。 では子スレッド(14)へ 53 を Enqueue します。
[スレッド14]: 53 を 43 で割ります…割り切れません。 では子スレッド(15)へ 53 を Enqueue します。
[スレッド15]: 53 を 47 で割ります…割り切れません。 これより小さい素数で割り切れなかったので 53 は素数です。
[スレッド15]: 素数 53を受け持つ子スレッド(16)を生成します。
[スレッド16]: 私は素数 53 を受け持つID番号 16のスレッドです。
[スレッド2]: 55 を 3 で割ります…割り切れません。 では子スレッド(3)へ 55 を Enqueue します。
[スレッド3]: 55 を 5 で割ります…おや、割り切れたので 55 は素数ではありません。
[スレッド2]: 57 を 3 で割ります…おや、割り切れたので 57 は素数ではありません。
[スレッド2]: 59 を 3 で割ります…割り切れません。 では子スレッド(3)へ 59 を Enqueue します。
[スレッド3]: 59 を 5 で割ります…割り切れません。 では子スレッド(4)へ 59 を Enqueue します。
[スレッド4]: 59 を 7 で割ります…割り切れません。 では子スレッド(5)へ 59 を Enqueue します。
[スレッド5]: 59 を 11 で割ります…割り切れません。 では子スレッド(6)へ 59 を Enqueue します。
[スレッド6]: 59 を 13 で割ります…割り切れません。 では子スレッド(7)へ 59 を Enqueue します。
[スレッド7]: 59 を 17 で割ります…割り切れません。 では子スレッド(8)へ 59 を Enqueue します。
[スレッド8]: 59 を 19 で割ります…割り切れません。 では子スレッド(9)へ 59 を Enqueue します。
[スレッド9]: 59 を 23 で割ります…割り切れません。 では子スレッド(10)へ 59 を Enqueue します。
[スレッド10]: 59 を 29 で割ります…割り切れません。 では子スレッド(11)へ 59 を Enqueue します。
[スレッド11]: 59 を 31 で割ります…割り切れません。 では子スレッド(12)へ 59 を Enqueue します。
[スレッド12]: 59 を 37 で割ります…割り切れません。 では子スレッド(13)へ 59 を Enqueue します。
[スレッド13]: 59 を 41 で割ります…割り切れません。 では子スレッド(14)へ 59 を Enqueue します。
[スレッド14]: 59 を 43 で割ります…割り切れません。 では子スレッド(15)へ 59 を Enqueue します。
[スレッド15]: 59 を 47 で割ります…割り切れません。 では子スレッド(16)へ 59 を Enqueue します。
[スレッド16]: 59 を 53 で割ります…割り切れません。 これより小さい素数で割り切れなかったので 59 は素数です。
[スレッド16]: 素数 59を受け持つ子スレッド(17)を生成します。
[スレッド17]: 私は素数 59 を受け持つID番号 17のスレッドです。
[スレッド2]: 61 を 3 で割ります…割り切れません。 では子スレッド(3)へ 61 を Enqueue します。
[スレッド3]: 61 を 5 で割ります…割り切れません。 では子スレッド(4)へ 61 を Enqueue します。
[スレッド4]: 61 を 7 で割ります…割り切れません。 では子スレッド(5)へ 61 を Enqueue します。
[スレッド5]: 61 を 11 で割ります…割り切れません。 では子スレッド(6)へ 61 を Enqueue します。
[スレッド6]: 61 を 13 で割ります…割り切れません。 では子スレッド(7)へ 61 を Enqueue します。
[スレッド7]: 61 を 17 で割ります…割り切れません。 では子スレッド(8)へ 61 を Enqueue します。
[スレッド8]: 61 を 19 で割ります…割り切れません。 では子スレッド(9)へ 61 を Enqueue します。
[スレッド9]: 61 を 23 で割ります…割り切れません。 では子スレッド(10)へ 61 を Enqueue します。
[スレッド10]: 61 を 29 で割ります…割り切れません。 では子スレッド(11)へ 61 を Enqueue します。
[スレッド11]: 61 を 31 で割ります…割り切れません。 では子スレッド(12)へ 61 を Enqueue します。
[スレッド12]: 61 を 37 で割ります…割り切れません。 では子スレッド(13)へ 61 を Enqueue します。
[スレッド13]: 61 を 41 で割ります…割り切れません。 では子スレッド(14)へ 61 を Enqueue します。
[スレッド14]: 61 を 43 で割ります…割り切れません。 では子スレッド(15)へ 61 を Enqueue します。
[スレッド15]: 61 を 47 で割ります…割り切れません。 では子スレッド(16)へ 61 を Enqueue します。
[スレッド16]: 61 を 53 で割ります…割り切れません。 では子スレッド(17)へ 61 を Enqueue します。
[スレッド17]: 61 を 59 で割ります…割り切れません。 これより小さい素数で割り切れなかったので 61 は素数です。
[スレッド17]: 素数 61を受け持つ子スレッド(18)を生成します。
[スレッド18]: 私は素数 61 を受け持つID番号 18のスレッドです。
[スレッド2]: 63 を 3 で割ります…おや、割り切れたので 63 は素数ではありません。
[スレッド2]: 65 を 3 で割ります…割り切れません。 では子スレッド(3)へ 65 を Enqueue します。
[スレッド3]: 65 を 5 で割ります…おや、割り切れたので 65 は素数ではありません。
[スレッド2]: 67 を 3 で割ります…割り切れません。 では子スレッド(3)へ 67 を Enqueue します。
[スレッド3]: 67 を 5 で割ります…割り切れません。 では子スレッド(4)へ 67 を Enqueue します。
[スレッド4]: 67 を 7 で割ります…割り切れません。 では子スレッド(5)へ 67 を Enqueue します。
[スレッド5]: 67 を 11 で割ります…割り切れません。 では子スレッド(6)へ 67 を Enqueue します。
[スレッド6]: 67 を 13 で割ります…割り切れません。 では子スレッド(7)へ 67 を Enqueue します。
[スレッド7]: 67 を 17 で割ります…割り切れません。 では子スレッド(8)へ 67 を Enqueue します。
[スレッド8]: 67 を 19 で割ります…割り切れません。 では子スレッド(9)へ 67 を Enqueue します。
[スレッド9]: 67 を 23 で割ります…割り切れません。 では子スレッド(10)へ 67 を Enqueue します。
[スレッド10]: 67 を 29 で割ります…割り切れません。 では子スレッド(11)へ 67 を Enqueue します。
[スレッド11]: 67 を 31 で割ります…割り切れません。 では子スレッド(12)へ 67 を Enqueue します。
[スレッド12]: 67 を 37 で割ります…割り切れません。 では子スレッド(13)へ 67 を Enqueue します。
[スレッド13]: 67 を 41 で割ります…割り切れません。 では子スレッド(14)へ 67 を Enqueue します。
[スレッド14]: 67 を 43 で割ります…割り切れません。 では子スレッド(15)へ 67 を Enqueue します。
[スレッド15]: 67 を 47 で割ります…割り切れません。 では子スレッド(16)へ 67 を Enqueue します。
[スレッド16]: 67 を 53 で割ります…割り切れません。 では子スレッド(17)へ 67 を Enqueue します。
[スレッド17]: 67 を 59 で割ります…割り切れません。 では子スレッド(18)へ 67 を Enqueue します。
[スレッド18]: 67 を 61 で割ります…割り切れません。 これより小さい素数で割り切れなかったので 67 は素数です。
[スレッド18]: 素数 67を受け持つ子スレッド(19)を生成します。
[スレッド19]: 私は素数 67 を受け持つID番号 19のスレッドです。
[スレッド2]: 69 を 3 で割ります…おや、割り切れたので 69 は素数ではありません。
[スレッド2]: 71 を 3 で割ります…割り切れません。 では子スレッド(3)へ 71 を Enqueue します。
[スレッド3]: 71 を 5 で割ります…割り切れません。 では子スレッド(4)へ 71 を Enqueue します。
[スレッド4]: 71 を 7 で割ります…割り切れません。 では子スレッド(5)へ 71 を Enqueue します。
[スレッド5]: 71 を 11 で割ります…割り切れません。 では子スレッド(6)へ 71 を Enqueue します。
[スレッド6]: 71 を 13 で割ります…割り切れません。 では子スレッド(7)へ 71 を Enqueue します。
[スレッド7]: 71 を 17 で割ります…割り切れません。 では子スレッド(8)へ 71 を Enqueue します。
[スレッド8]: 71 を 19 で割ります…割り切れません。 では子スレッド(9)へ 71 を Enqueue します。
[スレッド9]: 71 を 23 で割ります…割り切れません。 では子スレッド(10)へ 71 を Enqueue します。
[スレッド10]: 71 を 29 で割ります…割り切れません。 では子スレッド(11)へ 71 を Enqueue します。
[スレッド11]: 71 を 31 で割ります…割り切れません。 では子スレッド(12)へ 71 を Enqueue します。
[スレッド12]: 71 を 37 で割ります…割り切れません。 では子スレッド(13)へ 71 を Enqueue します。
[スレッド13]: 71 を 41 で割ります…割り切れません。 では子スレッド(14)へ 71 を Enqueue します。
[スレッド14]: 71 を 43 で割ります…割り切れません。 では子スレッド(15)へ 71 を Enqueue します。
[スレッド15]: 71 を 47 で割ります…割り切れません。 では子スレッド(16)へ 71 を Enqueue します。
[スレッド16]: 71 を 53 で割ります…割り切れません。 では子スレッド(17)へ 71 を Enqueue します。
[スレッド17]: 71 を 59 で割ります…割り切れません。 では子スレッド(18)へ 71 を Enqueue します。
[スレッド18]: 71 を 61 で割ります…割り切れません。 では子スレッド(19)へ 71 を Enqueue します。
[スレッド19]: 71 を 67 で割ります…割り切れません。 これより小さい素数で割り切れなかったので 71 は素数です。
[スレッド19]: 素数 71を受け持つ子スレッド(20)を生成します。
[スレッド20]: 私は素数 71 を受け持つID番号 20のスレッドです。
[スレッド2]: 73 を 3 で割ります…割り切れません。 では子スレッド(3)へ 73 を Enqueue します。
[スレッド3]: 73 を 5 で割ります…割り切れません。 では子スレッド(4)へ 73 を Enqueue します。
[スレッド4]: 73 を 7 で割ります…割り切れません。 では子スレッド(5)へ 73 を Enqueue します。
[スレッド5]: 73 を 11 で割ります…割り切れません。 では子スレッド(6)へ 73 を Enqueue します。
[スレッド6]: 73 を 13 で割ります…割り切れません。 では子スレッド(7)へ 73 を Enqueue します。
[スレッド7]: 73 を 17 で割ります…割り切れません。 では子スレッド(8)へ 73 を Enqueue します。
[スレッド8]: 73 を 19 で割ります…割り切れません。 では子スレッド(9)へ 73 を Enqueue します。
[スレッド9]: 73 を 23 で割ります…割り切れません。 では子スレッド(10)へ 73 を Enqueue します。
[スレッド10]: 73 を 29 で割ります…割り切れません。 では子スレッド(11)へ 73 を Enqueue します。
[スレッド11]: 73 を 31 で割ります…割り切れません。 では子スレッド(12)へ 73 を Enqueue します。
[スレッド12]: 73 を 37 で割ります…割り切れません。 では子スレッド(13)へ 73 を Enqueue します。
[スレッド13]: 73 を 41 で割ります…割り切れません。 では子スレッド(14)へ 73 を Enqueue します。
[スレッド14]: 73 を 43 で割ります…割り切れません。 では子スレッド(15)へ 73 を Enqueue します。
[スレッド15]: 73 を 47 で割ります…割り切れません。 では子スレッド(16)へ 73 を Enqueue します。
[スレッド16]: 73 を 53 で割ります…割り切れません。 では子スレッド(17)へ 73 を Enqueue します。
[スレッド17]: 73 を 59 で割ります…割り切れません。 では子スレッド(18)へ 73 を Enqueue します。
[スレッド18]: 73 を 61 で割ります…割り切れません。 では子スレッド(19)へ 73 を Enqueue します。
[スレッド19]: 73 を 67 で割ります…割り切れません。 では子スレッド(20)へ 73 を Enqueue します。
[スレッド20]: 73 を 71 で割ります…割り切れません。 これより小さい素数で割り切れなかったので 73 は素数です。
[スレッド20]: 素数 73を受け持つ子スレッド(21)を生成します。
[スレッド21]: 私は素数 73 を受け持つID番号 21のスレッドです。
[スレッド2]: 75 を 3 で割ります…おや、割り切れたので 75 は素数ではありません。
[スレッド2]: 77 を 3 で割ります…割り切れません。 では子スレッド(3)へ 77 を Enqueue します。
[スレッド3]: 77 を 5 で割ります…割り切れません。 では子スレッド(4)へ 77 を Enqueue します。
[スレッド4]: 77 を 7 で割ります…おや、割り切れたので 77 は素数ではありません。
[スレッド2]: 79 を 3 で割ります…割り切れません。 では子スレッド(3)へ 79 を Enqueue します。
[スレッド3]: 79 を 5 で割ります…割り切れません。 では子スレッド(4)へ 79 を Enqueue します。
[スレッド4]: 79 を 7 で割ります…割り切れません。 では子スレッド(5)へ 79 を Enqueue します。
[スレッド5]: 79 を 11 で割ります…割り切れません。 では子スレッド(6)へ 79 を Enqueue します。
[スレッド6]: 79 を 13 で割ります…割り切れません。 では子スレッド(7)へ 79 を Enqueue します。
[スレッド7]: 79 を 17 で割ります…割り切れません。 では子スレッド(8)へ 79 を Enqueue します。
[スレッド8]: 79 を 19 で割ります…割り切れません。 では子スレッド(9)へ 79 を Enqueue します。
[スレッド9]: 79 を 23 で割ります…割り切れません。 では子スレッド(10)へ 79 を Enqueue します。
[スレッド10]: 79 を 29 で割ります…割り切れません。 では子スレッド(11)へ 79 を Enqueue します。
[スレッド11]: 79 を 31 で割ります…割り切れません。 では子スレッド(12)へ 79 を Enqueue します。
[スレッド12]: 79 を 37 で割ります…割り切れません。 では子スレッド(13)へ 79 を Enqueue します。
[スレッド13]: 79 を 41 で割ります…割り切れません。 では子スレッド(14)へ 79 を Enqueue します。
[スレッド14]: 79 を 43 で割ります…割り切れません。 では子スレッド(15)へ 79 を Enqueue します。
[スレッド15]: 79 を 47 で割ります…割り切れません。 では子スレッド(16)へ 79 を Enqueue します。
[スレッド16]: 79 を 53 で割ります…割り切れません。 では子スレッド(17)へ 79 を Enqueue します。
[スレッド17]: 79 を 59 で割ります…割り切れません。 では子スレッド(18)へ 79 を Enqueue します。
[スレッド18]: 79 を 61 で割ります…割り切れません。 では子スレッド(19)へ 79 を Enqueue します。
[スレッド19]: 79 を 67 で割ります…割り切れません。 では子スレッド(20)へ 79 を Enqueue します。
[スレッド20]: 79 を 71 で割ります…割り切れません。 では子スレッド(21)へ 79 を Enqueue します。
[スレッド21]: 79 を 73 で割ります…割り切れません。 これより小さい素数で割り切れなかったので 79 は素数です。
[スレッド21]: 素数 79を受け持つ子スレッド(22)を生成します。
[スレッド22]: 私は素数 79 を受け持つID番号 22のスレッドです。
[スレッド2]: 81 を 3 で割ります…おや、割り切れたので 81 は素数ではありません。
[スレッド2]: 83 を 3 で割ります…割り切れません。 では子スレッド(3)へ 83 を Enqueue します。
[スレッド3]: 83 を 5 で割ります…割り切れません。 では子スレッド(4)へ 83 を Enqueue します。
[スレッド4]: 83 を 7 で割ります…割り切れません。 では子スレッド(5)へ 83 を Enqueue します。
[スレッド5]: 83 を 11 で割ります…割り切れません。 では子スレッド(6)へ 83 を Enqueue します。
[スレッド6]: 83 を 13 で割ります…割り切れません。 では子スレッド(7)へ 83 を Enqueue します。
[スレッド7]: 83 を 17 で割ります…割り切れません。 では子スレッド(8)へ 83 を Enqueue します。
[スレッド8]: 83 を 19 で割ります…割り切れません。 では子スレッド(9)へ 83 を Enqueue します。
[スレッド9]: 83 を 23 で割ります…割り切れません。 では子スレッド(10)へ 83 を Enqueue します。
[スレッド10]: 83 を 29 で割ります…割り切れません。 では子スレッド(11)へ 83 を Enqueue します。
[スレッド11]: 83 を 31 で割ります…割り切れません。 では子スレッド(12)へ 83 を Enqueue します。
[スレッド12]: 83 を 37 で割ります…割り切れません。 では子スレッド(13)へ 83 を Enqueue します。
[スレッド13]: 83 を 41 で割ります…割り切れません。 では子スレッド(14)へ 83 を Enqueue します。
[スレッド14]: 83 を 43 で割ります…割り切れません。 では子スレッド(15)へ 83 を Enqueue します。
[スレッド15]: 83 を 47 で割ります…割り切れません。 では子スレッド(16)へ 83 を Enqueue します。
[スレッド16]: 83 を 53 で割ります…割り切れません。 では子スレッド(17)へ 83 を Enqueue します。
[スレッド17]: 83 を 59 で割ります…割り切れません。 では子スレッド(18)へ 83 を Enqueue します。
[スレッド18]: 83 を 61 で割ります…割り切れません。 では子スレッド(19)へ 83 を Enqueue します。
[スレッド19]: 83 を 67 で割ります…割り切れません。 では子スレッド(20)へ 83 を Enqueue します。
[スレッド20]: 83 を 71 で割ります…割り切れません。 では子スレッド(21)へ 83 を Enqueue します。
[スレッド21]: 83 を 73 で割ります…割り切れません。 では子スレッド(22)へ 83 を Enqueue します。
[スレッド22]: 83 を 79 で割ります…割り切れません。 これより小さい素数で割り切れなかったので 83 は素数です。
[スレッド22]: 素数 83を受け持つ子スレッド(23)を生成します。
[スレッド23]: 私は素数 83 を受け持つID番号 23のスレッドです。
[スレッド2]: 85 を 3 で割ります…割り切れません。 では子スレッド(3)へ 85 を Enqueue します。
[スレッド3]: 85 を 5 で割ります…おや、割り切れたので 85 は素数ではありません。
[スレッド2]: 87 を 3 で割ります…おや、割り切れたので 87 は素数ではありません。
[スレッド2]: 89 を 3 で割ります…割り切れません。 では子スレッド(3)へ 89 を Enqueue します。
[スレッド3]: 89 を 5 で割ります…割り切れません。 では子スレッド(4)へ 89 を Enqueue します。
[スレッド4]: 89 を 7 で割ります…割り切れません。 では子スレッド(5)へ 89 を Enqueue します。
[スレッド5]: 89 を 11 で割ります…割り切れません。 では子スレッド(6)へ 89 を Enqueue します。
[スレッド6]: 89 を 13 で割ります…割り切れません。 では子スレッド(7)へ 89 を Enqueue します。
[スレッド7]: 89 を 17 で割ります…割り切れません。 では子スレッド(8)へ 89 を Enqueue します。
[スレッド8]: 89 を 19 で割ります…割り切れません。 では子スレッド(9)へ 89 を Enqueue します。
[スレッド9]: 89 を 23 で割ります…割り切れません。 では子スレッド(10)へ 89 を Enqueue します。
[スレッド10]: 89 を 29 で割ります…割り切れません。 では子スレッド(11)へ 89 を Enqueue します。
[スレッド11]: 89 を 31 で割ります…割り切れません。 では子スレッド(12)へ 89 を Enqueue します。
[スレッド12]: 89 を 37 で割ります…割り切れません。 では子スレッド(13)へ 89 を Enqueue します。
[スレッド13]: 89 を 41 で割ります…割り切れません。 では子スレッド(14)へ 89 を Enqueue します。
[スレッド14]: 89 を 43 で割ります…割り切れません。 では子スレッド(15)へ 89 を Enqueue します。
[スレッド15]: 89 を 47 で割ります…割り切れません。 では子スレッド(16)へ 89 を Enqueue します。
[スレッド16]: 89 を 53 で割ります…割り切れません。 では子スレッド(17)へ 89 を Enqueue します。
[スレッド17]: 89 を 59 で割ります…割り切れません。 では子スレッド(18)へ 89 を Enqueue します。
[スレッド18]: 89 を 61 で割ります…割り切れません。 では子スレッド(19)へ 89 を Enqueue します。
[スレッド19]: 89 を 67 で割ります…割り切れません。 では子スレッド(20)へ 89 を Enqueue します。
[スレッド20]: 89 を 71 で割ります…割り切れません。 では子スレッド(21)へ 89 を Enqueue します。
[スレッド21]: 89 を 73 で割ります…割り切れません。 では子スレッド(22)へ 89 を Enqueue します。
[スレッド22]: 89 を 79 で割ります…割り切れません。 では子スレッド(23)へ 89 を Enqueue します。
[スレッド23]: 89 を 83 で割ります…割り切れません。 これより小さい素数で割り切れなかったので 89 は素数です。
[スレッド23]: 素数 89を受け持つ子スレッド(24)を生成します。
[スレッド24]: 私は素数 89 を受け持つID番号 24のスレッドです。
[スレッド2]: 91 を 3 で割ります…割り切れません。 では子スレッド(3)へ 91 を Enqueue します。
[スレッド3]: 91 を 5 で割ります…割り切れません。 では子スレッド(4)へ 91 を Enqueue します。
[スレッド4]: 91 を 7 で割ります…おや、割り切れたので 91 は素数ではありません。
[スレッド2]: 93 を 3 で割ります…おや、割り切れたので 93 は素数ではありません。
[スレッド2]: 95 を 3 で割ります…割り切れません。 では子スレッド(3)へ 95 を Enqueue します。
[スレッド3]: 95 を 5 で割ります…おや、割り切れたので 95 は素数ではありません。
[スレッド2]: 97 を 3 で割ります…割り切れません。 では子スレッド(3)へ 97 を Enqueue します。
[スレッド3]: 97 を 5 で割ります…割り切れません。 では子スレッド(4)へ 97 を Enqueue します。
[スレッド4]: 97 を 7 で割ります…割り切れません。 では子スレッド(5)へ 97 を Enqueue します。
[スレッド5]: 97 を 11 で割ります…割り切れません。 では子スレッド(6)へ 97 を Enqueue します。
[スレッド6]: 97 を 13 で割ります…割り切れません。 では子スレッド(7)へ 97 を Enqueue します。
[スレッド7]: 97 を 17 で割ります…割り切れません。 では子スレッド(8)へ 97 を Enqueue します。
[スレッド8]: 97 を 19 で割ります…割り切れません。 では子スレッド(9)へ 97 を Enqueue します。
[スレッド9]: 97 を 23 で割ります…割り切れません。 では子スレッド(10)へ 97 を Enqueue します。
[スレッド10]: 97 を 29 で割ります…割り切れません。 では子スレッド(11)へ 97 を Enqueue します。
[スレッド11]: 97 を 31 で割ります…割り切れません。 では子スレッド(12)へ 97 を Enqueue します。
[スレッド12]: 97 を 37 で割ります…割り切れません。 では子スレッド(13)へ 97 を Enqueue します。
[スレッド13]: 97 を 41 で割ります…割り切れません。 では子スレッド(14)へ 97 を Enqueue します。
[スレッド14]: 97 を 43 で割ります…割り切れません。 では子スレッド(15)へ 97 を Enqueue します。
[スレッド15]: 97 を 47 で割ります…割り切れません。 では子スレッド(16)へ 97 を Enqueue します。
[スレッド16]: 97 を 53 で割ります…割り切れません。 では子スレッド(17)へ 97 を Enqueue します。
[スレッド17]: 97 を 59 で割ります…割り切れません。 では子スレッド(18)へ 97 を Enqueue します。
[スレッド18]: 97 を 61 で割ります…割り切れません。 では子スレッド(19)へ 97 を Enqueue します。
[スレッド19]: 97 を 67 で割ります…割り切れません。 では子スレッド(20)へ 97 を Enqueue します。
[スレッド20]: 97 を 71 で割ります…割り切れません。 では子スレッド(21)へ 97 を Enqueue します。
[スレッド21]: 97 を 73 で割ります…割り切れません。 では子スレッド(22)へ 97 を Enqueue します。
[スレッド22]: 97 を 79 で割ります…割り切れません。 では子スレッド(23)へ 97 を Enqueue します。
[スレッド23]: 97 を 83 で割ります…割り切れません。 では子スレッド(24)へ 97 を Enqueue します。
[スレッド24]: 97 を 89 で割ります…割り切れません。 これより小さい素数で割り切れなかったので 97 は素数です。
[スレッド24]: 素数 97を受け持つ子スレッド(25)を生成します。
[スレッド25]: 私は素数 97 を受け持つID番号 25のスレッドです。
[スレッド2]: 99 を 3 で割ります…おや、割り切れたので 99 は素数ではありません。
[スレッド3]: 待機に入ります。
[スレッド5]: 待機に入ります。
[スレッド6]: 待機に入ります。
[スレッド7]: 待機に入ります。
[スレッド8]: 待機に入ります。
[スレッド9]: 待機に入ります。
[スレッド10]: 待機に入ります。
[スレッド11]: 待機に入ります。
[スレッド12]: 待機に入ります。
[スレッド13]: 待機に入ります。
[スレッド14]: 待機に入ります。
[スレッド15]: 待機に入ります。
[スレッド16]: 待機に入ります。
[スレッド17]: 待機に入ります。
[スレッド18]: 待機に入ります。
[スレッド19]: 待機に入ります。
[スレッド20]: 待機に入ります。
[スレッド21]: 待機に入ります。
[スレッド22]: 待機に入ります。
[スレッド23]: 待機に入ります。
[スレッド24]: 待機に入ります。
[スレッド25]: 私の仕事は終了しました。
[スレッド24]: 私の仕事は終了しました。
[スレッド23]: 私の仕事は終了しました。
[スレッド22]: 私の仕事は終了しました。
[スレッド21]: 私の仕事は終了しました。
[スレッド20]: 私の仕事は終了しました。
[スレッド19]: 私の仕事は終了しました。
[スレッド18]: 私の仕事は終了しました。
[スレッド17]: 私の仕事は終了しました。
[スレッド16]: 私の仕事は終了しました。
[スレッド15]: 私の仕事は終了しました。
[スレッド14]: 私の仕事は終了しました。
[スレッド13]: 私の仕事は終了しました。
[スレッド12]: 私の仕事は終了しました。
[スレッド11]: 私の仕事は終了しました。
[スレッド10]: 私の仕事は終了しました。
[スレッド9]: 私の仕事は終了しました。
[スレッド8]: 私の仕事は終了しました。
[スレッド7]: 私の仕事は終了しました。
[スレッド6]: 私の仕事は終了しました。
[スレッド5]: 私の仕事は終了しました。
[スレッド4]: 待機に入ります。
[スレッド4]: 私の仕事は終了しました。
[スレッド3]: 私の仕事は終了しました。
[スレッド2]: 待機に入ります。
[スレッド2]: 私の仕事は終了しました。
[スレッド1]: 私の仕事は終了しました。
---- 終了 ----

こんな動きで

 各スレッドは一つの素数を受け持っていて、送られてきた数をかたっぱしからその素数で割ります。末端のスレッド(実行した直後はもちろん、一つのメインスレッドと最初のスレッドしかありません)で割り切れなかったら数は素数ということになります。そこでこの新たな素数を「受け持つ」子スレッドをこさえます。

 もしもどこかのスレッドで割り切れたら、それは素数じゃないですね。また、途中のスレッドで割り切れなかった時は、その数を子スレッドの方に渡して、チェックをしてもらうために、割り切れなかった数を子スレッドのキューにぶちこみます。こうして、小さな数の素数で割り切れない数は次々により大きな数の素数を受け持つ子スレッドに渡されていきます。これがこのプログラムの流れです。

 素数を探す範囲を大きくすると、もっとスレッドの処理がいきいきとわかるでしょう。

ページの上に戻る