掲示板ランキング  システムユーティリティ(レプリケータ)


掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板1

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧

No.7072

素数の列挙プログラムについて
投稿者---miho(2007/02/06 17:19:38)


以下のプログラムの数字コメント部分(flagの意味と機能)がわかりませ
ん。どなたか御教示の程宜しくお願い致します。

/*
    1,000以下の素数を求める
*/

#include <stdio.h>

int main(void)
{
    int  i, n;
    int  prime[500];                      /* 素数を格納する配列 */
    int  ptr = 0;                         /* 既に得られた素数の回数 */
    unsigned long  counter = 0;           /* 乗除の回数 */

    prime[ptr++] = 2;                     /* 2は素数である */
    prime[ptr++] = 3;                     /* 3も素数である */

    for (n = 5; n <= 1000; n += 2) {      /* 基数のみを対象とする */
        int  flag = 0;            /* (1) */          
        for (i = 1; counter++, prime[i] * prime[i] <= n; i++) {
            counter++;
            if (n % prime[i] == 0) {      /* 割り切れると素数ではない */
                flag = 1;                  /* (2) */       
                break;                    /* それ以上の繰返しは不要 */
            }
        }
        if (!flag)                        /* (3) */      
            prime[ptr++] = n;             /* 配列に登録 */
    }

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

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

    return (0);
}





この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:素数の列挙プログラムについて 7073 akg 2007/02/06 17:26:57


No.7073

Re:素数の列挙プログラムについて
投稿者---akg(2007/02/06 17:26:57)


変数iに関するforループを抜けるとき、下記のいずれなのかを制御するために
用いています。
・素数テーブルのいずれかの要素で割り切れたからforループを抜けたのか
 (このときはflagが1なので、素数テーブルに新たに登録しない)
・素数テーブルのすべての要素で割り切れず、forループを回りきって抜けたのか
 (このときはflagが0なので、素数テーブルに新たに登録する)


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧





掲示板提供:(有)リアル・インテグリティ