0

さまざまなフォーラムでもこれに関する多くのトピックがあることは知っていますが、私の問題は次のとおりです。

Q 1. オイラー問題 7 (10001 番目の素数を見つける) について、これは私が自分で考えた私のコードです。

#include <stdio.h>
int main()
{
    int i,j,k=0,m=0,num;
    for(i=1;m<10001;i++)
    {
        k=0;
        for(j=2;j<i;j++)
        {
            if(i%j!=0)
                k++;
        }
        if(k+2==i)
        {    
            m++;
            num=i;
        }  
    }
    printf("%d %d",num,m);
}

この問題は 10000 番目の素数 (m<10001) を表示するはずですが、10001 番目の素数を表示します。なぜですか?

4

3 に答える 3

3

が 10001のときにループが壊れます。mこれが 10001 を出力する理由ですmmから始まるので0、10001番目の素数を出力します。あなたのコードでは、ループは0...10000(10001 回) から実行されます。

条件を(10000 回m<10000から) ループ実行するように変更し、ループの最後には.0...9999m10000

于 2013-11-02T05:19:58.667 に答える
0

素数のすべての倍数のチェックをスキップするため、エラトステネスのふるいを実装してみてください。

于 2014-03-23T06:49:13.527 に答える