C言語でProject Euler(プロジェクト・オイラー)に挑戦 > スポンサー広告 > C言語でProject Euler 【Problem7】

    C言語でProject Euler(プロジェクト・オイラー)に挑戦 > Project Euler(プロジェクト・オイラー)【Problem 6~10】 > C言語でProject Euler 【Problem7】

    スポンサー広告

    スポンサーサイト

    上記の広告は1ヶ月以上更新のないブログに表示されています。
    新しい記事を書く事で広告が消せます。

    Project Euler(プロジェクト・オイラー)【Problem 6~10】

    C言語でProject Euler 【Problem7】

    Project Euler(プロジェクトオイラー)のproblem7☆
    C言語を使っています。


    /* Problem 7 †*/
    素数を小さい方から 6 つ並べると、2, 3, 5, 7, 11, 13 であり、
    6 番目の素数は 13 である。
    10001 番目の素数を 求めよ。


    #include <stdio.h>
    #include <math.h>
    #include <conio.h>

    int main(void)
    {
        int i, j, cnt;
        int flg;

        cnt = 1;
        i = 2;

        while(cnt <= 10001){
            flg=0;

            for(j=2; j<=(int)sqrt(i); j++){
                if(i%j == 0){
                    flg = 1;
                    break;
                }
            }

            if(flg==0){
                cnt++;
            }

            i++;
        }

        printf("%d\n", i-1);

        getch();
        return 0;
    }


    この問題は、「素数」の求め方がポイントなんだと思います。
    Project Euler(プロジェクトオイラー)、数学の知識も必要とします。

    アルゴリズムを考える【素数】
    の中の「その2」を使った方法でやってみました。
    本来は、平方根を超えない最大の素数で割るのですが、
    今回やった方法は
    平方根を超えない数で割る、と言ったものです。

    もっと数が大きくなってきたら今回のやり方ではダメなんだと思います。
    が・・・
    この問題なら時間もそうかからないようなので、単純な考え方でやってしまいました

    やっぱりこういう問題も「エラトステネスのふるい」を使うべきなのでしょうか
    正しいというか、こうするべき!なようなもの、ありましたらぜひとも教えてください




    ☆応援お願いします☆
    にほんブログ村 IT技術ブログ C/C++へ
    にほんブログ村


    <<C言語でProject Euler 【Problem8】C言語でProject Euler(プロジェクト・オイラー)に挑戦アルゴリズムを考える【素数】>>

    <<C言語でProject Euler 【Problem8】C言語でProject Euler(プロジェクト・オイラー)に挑戦アルゴリズムを考える【素数】>>

    コメント

    コメントする

    トラックバック


    この記事にトラックバックする(FC2ブログユーザー)

    カテゴリ

    最新記事

    WiMAX & WiFi & モバイル

    便利ソフトいろいろ

    最新トラックバック

    最新コメント

    カウンター

    BlogRancking



    上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。