質問: ### 実現したいこと ある正整数xが素数か否かを判定する関数`isprime`を作成しa以上b以下の素数すべてを表示するプログラムを作りたい。 ※エラストテネスの篩や2からx-1までのすべての数で割るという方法を使ってはいけない。 そもそも下のプログラムはエラストテネスの篩のような気がするのですが違いますか?わかれば教えてください。 ### 問題点 115以上149以下の時だけなにも表示されない。 **実行結果** ``` 1より大きい数aを入力 100 100より大きい数bを入力 149 100以上149以下の素数は次の通りです 101 103 107 109 113 127 131 137 139 149 ------------------------------------------------------ 1より大きい数aを入力 115 100より大きい数bを入力 125 115以上125以下の素数は次の通りです ------------------------------------------------------ 1より大きい数aを入力 9999900 100より大きい数bを入力 10000000 9999900以上10000000以下の素数は次の通りです 9999901 9999907 9999929 9999931 9999937 9999943 9999971 9999973 9999991 ``` ### コード ``` #include #include //ある正整数xが素数か否かを判定する関数 int inspire(int x) { //戻り値で素数か否かを表す「1:素数、0:違う」 int n; if(x==2){ return 1; } if(x<2||x%2==0){ return 0; } for(n=3;n<=sqrt((double)x);n+=2){ if(x%n==0){ return 0; } } return 1; } int main(void) { int a,b,i; printf("1より大きい数aを入力 "); scanf("%d",&a); printf("100より大きい数bを入力 "); scanf("%d",&b); //結果の表示 printf("%d以上%d以下の素数は次の通りです \n",a,b); for(i=a;i<=b;i++){ if(inspire(i)){ printf("%d ",i); } } printf("\n"); return 0; } ```
回答: > > エラストテネスの篩のような気がする > > > 違います。 3以上の√上限までの奇数で割っているだけです。