• 締切済み

宿題で100000未満の素数の総数を求めるプログラミングの課題が出たの

宿題で100000未満の素数の総数を求めるプログラミングの課題が出たのですが、途中までは分かったのですが、先生が言うには最後のほうに、i=2からNUMまで配列要素prime[i]が1である素数iを出力するプログラムを書かないといけないんですが、それがわかりませんので教えてください。

みんなの回答

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.5

エラーが出るなら具体的にどんなエラーか記載ください。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

100000程度でよければちょっと検索すればでてくるから, それをがんばって数えればいいのでは? 「総数を求める」のが問題であって, 「素数を求める」ことは課題に入ってませんよね.

参考URL:
http://www.rsok.com/~jrm/printprimes.html
回答No.3

[1] prime[2]~prime[NUM] を 1 で埋める [2] i = 2 [3] prime[i] が 1 なら素数なので出力し、   (iの倍数は素数ではないので)prime[iの倍数] をすべて 0 にする [4] i = i + 1 [5] i <= NUM である間、2,3,4 を繰り返す

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.2

「最後の方に」といわれましても、質問者さんが どういったソースを書かれたがわからないことには、 どこにどのような内容を加えればよいか 全くわかりません。

saya1001
質問者

補足

すみません。こういうプログラムです。   #include<stdio.h> #include<math.h> #define NUM 100000 int main(void){ int prime[NUM+1],i,j,Limit; for(i=2;i<=NUM;i++){ prime[i]=1; } Limit=(int)sqrt(NUM); for(i=2;i<=Limit;i++){ if(prime[i]==1){ for(j=2*i;j<=NUM;j+=i){ prime[j]=0; } } } for ( i=2;i<=NUM;i++) {  if (prime[i]) {    printf("%d\n",i);   } } }

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.1

エラトステネスのふるいで素数を求めてるってことで良いのかな。 iが素数のときprime[i]が1で、iが素数でないときprime[i]は0とします。 このとき for (int i=2;i<=NUM;i++) {  if (prime[i]) {   printf("%d\n", i);  } } とすれば、素数が1行に一つずつ表示されます。

saya1001
質問者

補足

エラーが出てしまうんですが。

関連するQ&A

  • 100000未満素数の総数を求めるのに困っているので教えてください。

    100000未満素数の総数を求めるのに困っているので教えてください。     #include<stdio.h> #include<math.h> #define NUM 100000 int main(void){ int prime[NUM+1],i,j,Limit; for(i=2;i<=NUM;i++){ prime[i]=1; } Limit=(int)sqrt(NUM); for(i=2;i<=Limit;i++){ if(prime[i]==1){ for(j=2*i;j<=NUM;j+=i){ prime[j]=0; } } } for ( i=2;i<=NUM;i++) {  if (prime[i]) {    printf("%d\n",i);   } } } これなんですが、実行したらエラーが出てしまうんですがなぜでしょうか?

  • 100未満の素数を表示するには

    100未満の素数を表示するには 「0~99までの配列を用意し、100の平方根である10までの素数の倍数を素数でない数としていく。」 実行例の一部「2の倍数を消去:468…96 98」 というように次は3の倍数、5の倍数、7の倍数を表示させ、それらに該当しないのを表示せよという問題です。 ヒントとして↓がもともと書かれていたんですが、ヒントがよくわかりません。 2の倍数を表示し消去する方法を教えてください。 #include<stdio.h> int main() { int i,j,prime[100]; for (i=0;i<N;i++) prime[i]=1; //全ての要素を素数の候補とする prime[0]=prime[1]=0; //0と1は素数ではない printf("\n100未満の素数を出力\n"); return 0; }

  • 100未満の素数出力の最後

    100未満の素数出力の最後 #include<stdio.h> int main() { int i,j,prime[100]; int N=100; for(i=0;i<N;i++){ prime[i]=1; }//全ての要素を素数の候補とする prime[0]=prime[1]=0; //0と1は素数ではない printf("2の倍数:"); for(i=2;i*2<100;i++){ printf("%d ",i*2); prime[i];//←prime[i]に2の倍数を入れてるつもりです。 } prime[i]=0;//それを0にしてるつもりです。 printf("\n3の倍数:"); for(i=2;i*3<100;i++){ printf("%d ",i*3); prime[i];//同じく } prime[i]=0;//同じく printf("\n5の倍数:"); for(i=2;i*5<100;i++){ printf("%d ",i*5); prime[i];//同じく } prime[i]=0;//同じく printf("\n7の倍数:"); for(i=2;i*7<100;i++){ printf("%d ",i*7); prime[i];//同じく } prime[i]=0;//同じく printf("\n100未満の素数を出力\n"); for (i=0;i<N;i++){ printf("%d ",prime[i]!=0);//←prime[i]=0じゃないのを出力してるつもりなんですがうまく表示されません } return 0; } どうしたらいいでしょうか? 自分なりに考えても0か1しか表示されません;

  • C言語プログラミングについて

    「要素数10の配列を準備する。 配列の各要素に0.0~1.0の乱数を入れる。 各配列に入力された乱数を出力する。 配列をオリジナル関数hanteiに渡す。 数hantei内において,各要素の値が0.5以上であれば1 , 0.5未満であれば0を出力する。」 C言語でこのような問題があるのですがどのように作ればよろしいのでしょうか? ちなみに以下のように作ってみて、「argcは一度も使用されていない」「argvは一度も使用されていない」とエラー(警告)が出てしまいました。修正、もしくは正しいプログラムを教えてくれませんか? #include <stdio.h> #include <time.h> #include <stdlib.h> #define SIZE 10 int hantei(double num) { return num>=0.5; } int main(int argc,char *argv[]) { double number[SIZE]; int i; srand((unsigned)time(NULL)); for(i=0;i<SIZE;i++) number[i]=(double)rand() / RAND_MAX; //手抜き乱数 for(i=0;i<SIZE;i++) { printf("%f %d\n",number[i], hantei(number[i])); } return 0; }

  • Cプログラミング 

    素数を判定するプログラミングの作成で以下のプログラミングを作成したのですが、すべて 素数でないとでてしまいます。どなたか間違いをおしえていただけませんでしょうか。 #include<stdio.h> int main(void) { int num,i; printf("Please input a number:"); scanf("%d",&num); for (i=2; i < num ; i++){num % i; if (num % i == 0) break; } if (num % i == 0) printf("%d is not prime. \n" ,num); else printf("%d is prime. \n" ,num); return 0; }

  • 素数であるかを判断するプログラムについて

    C言語を学習していて「独習C」48ページの次のプログラムが分かりませんでした。 ~~~~~~~~~~~~~~~~ #include <stdlib.h> #include <stdio.h> int main(void) { int num, i, is_prime; printf("判定したい数を入力してください"); scanf("%d", &num); /*ここからがわかりません*/ is_prime = 1; for(i=2; i<=num/2; i=i+1) if((num%i)==0) is_prime = 0; if(is_prime==1) printf("素数です"); else printf("素数ではありません"); return 0; } ~~~~~~~~~~~~~~~ 私はこうなると考えています。どこが間違っているでしょうか? numが0のとき、2<=0となり、素数 numが1のとき、2<=0.5となり、素数でない numが2のとき、2<=1となり、素数でない numが3のとき、2<=1.5となり、素数でない

  • エラーがどこかわからない

    #include<stdio.h> #include<math.h> #define NUM 100000 int main(void){ int prime[NUM+1],i,j,Limit; for(i=2;i<=NUM;i++){ prime[i]=1; } Limit=(int)sqrt(NUM); for(i=2;i<=Limit;i++){ if(prime[i]==1){ for(j=2*i;j<=NUM;j+=i){ prime[j]=0; } } } for ( i=2;i<=NUM;i++) {  if (prime[i]){    printf("%d\n",i); } } }  これは100000未満の素数の総数を求めるプログラムなんですが、実行したらエラーが出てくるんです。何度も確認しても正しいはずなんですがエラー出てきて困っています。どこが間違っているでしょうか?

  • 独習C 素数テスタ・・・分からない

    忙しい中失礼します。 ”素数”を確認するプログラムについて質問があります。 現在独習Cを用いて勉強中なのですが、下記のプログラム理解に苦しんでいます。 宜しければアドバイスを下さい。 下記のプログラム/*素数テスタ*/内から、 質問(1)部:for(; num <=1; )の意味は’1’よりも大きな数字を入れれば、for文のループを抜ける→この考えで合っている、と自分では思っていますが、間違っているのでしょうか? ご指摘願います。 質問(2)部: 1.num=5の場合、for ( i=2; i <= num / 2; i = i+1) → i <= num / 2はi <= 2となる。→i <= 2となり、for文のループを抜ける。→ if ((num % i) == 0) の条件は成り立たない。→ is_prime = 1のため、"素数です"と表示される。→納得! 2.num=9の場合、for ( i=2; i <= num / 2; i = i+1)→  i <= num / 2は i(=2) <= 4となり、 i = i+1の’i’部が’4’となった後for文のループを抜ける。→if ((num % i) == 0)はnum % iは 9%4で’1’余り、となり、if ((num % i) == 0) の条件は成り立たない。→is_prime == 1 の状態がキープされる。→"素数です"と表示される、と思いきや"素数ではありません"と表示される。 で、ここで何故"素数ではありません"と表示されるのかが分かりません。頭の中では’9’が素数ではないのは分かりますが、プログラムの中でどういう経路を辿り、"素数ではありません"と表示されるのでしょうか。その過程の説明を欲しています。 宜しければ、アドバイスを下さい。 /*素数テスタ*/ #include <stdio.h> int main(void) { int num = 0, i, is_prime; for(; num <=1; ){ //質問(1) printf("判定したい数を入力して下さい: "); scanf("%d", &num); } /*約数があるかどうかを調べる*/ is_prime = 1; for ( i=2; i <= num / 2; i = i+1) //質問(2) if ((num % i) == 0) //質問(2) is_prime = 0; //質問(2) if (is_prime == 1 ) printf("素数です"); else printf("素数ではありません"); return 0; }

  • プログラミングの課題で困っています。助けて下さい。

    プログラミングの課題で困っています。助けて下さい。 課題1-1: 実数 a と実数 b を入力すると、一次方程式ax + b = 0 の解を求めるプログラムを作る 課題1-2: 1-1 で作成したプログラムについて、さらにa として1が入力されたとき、方程式の表示部      分が1x + 3 = 0ではなくx + 3 = 0となるようにせよ 課題1-3: 1-2 で作成したプログラムについて、さらにb として0 や負の数が入力されたとき、方程式     の表示部分が2x = 0 や2x – 3 = 0となるようにせよ 課題1-4: 1-3 で作ったプログラムについて、さらにa の値として0が入力された場合、「解けません」     と表示するようにせよ 課題1-5: 係数 a, b, c を入力すると、 2次方程式ax2 + bx + c =0の解を表示するプログラムを作     れ ※ 1-2 ~ 1-4 のような機能を盛り込む ※ a が0の場合には、先に作った1次方程式のプログラムが動く という課題です。最終的にこれらを一つのプログラムにしてください。判別式や解の公式、ルート√などを使ってよろしくお願いします。  

  • プログラミング 配列 最小値

    プログラミング 配列 最小値 要素数が5の配列にキーボードから整数を入力し、最小値を表示する というプログラムのソースについてなんですが #include <stdio.h> int main(void) { int 1; int min, vc[5]; for(i = 0; i < 5; i++) vc(i) = i+1; ここまで自分で考えたんですが間違ってるでしょうか? 最小値を表示させる文がよくわからないのですが教えていただけないでしょうか

専門家に質問してみよう