• 締切済み

素数判定について

C言語で、 素数を判定するのに、全ての素数で割ることによって 判定するプログラムって、どのように作ればいいんでしょうか?それを線形リストを使えっていってもわかりません。 全ての数で順に割っていって割りきれた数が割られた数と同じなら素数で、それ以外なら素数ではないというプログラムならできるんですけど。。。

  • janne
  • お礼率16% (11/68)

みんなの回答

  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.2

線形リストは求まった素数を順次格納していくのに使うのだと思います。 もちろん、全ての素数で割っていくと言う時の「全ての素数」もこの線形リストの事であるのは言うまでもありません。 素数判定(複数個と考える)に先立って素数テーブルを作るのでしょうね。 配列でもできるし、そのほうが簡単なのですが、求めるべき素数の数が増えたとき有利と言うことか、あるいは単に線形リストを使わせたかったのでしょう。 判定すべき数の最大のもののルートが、割っていく素数の上限でよい事は、すでに#1の回答者:nobbさんが述べられています。

  • nobb
  • ベストアンサー率0% (0/7)
回答No.1

とりあえず、「全ての数で順に~」割っていくやりかたなら、その数の平方根の値を超えない整数までで止めるようにしたらよいですよ。  たとえば、71が素数かどうか調べるなら、71の平方根を超えない最大の整数、すなわち8までの整数で割ってみて、割り切れるものが無いなら素数、と。 大きい数ほど、割り算の回数が増えるので、とりあえず 1つの整数を調べるに費やす割り算の回数が半分近くに減りますよ(調べる整数の値が大きいほど)。  ただ、平方根を求める処理が毎回入りますが、、、、 ちなみに、上記のやり方は、基本的に中学生が素数を調べるときに使うやり方です(笑)。 回答の方向性が違ってたらごめんなさい。

関連するQ&A

  • 素数判定プログラム

    C言語で、『n以下のすべての素数を求めるプログラム』のソースリストを平方根を使ったやり方で作りたいのですが、エラーが出てしまって、どうしてもうまく作れません。 C言語初心者の上、勉強不足なのが悪いのですが・・・ぜひ教えてください!お願いします!

  • JAVAで素数判定

    JAVAの勉強をしてます 練習問題で、素数判定のプログラムをしているのですが。 1~14までの判定はうまくいきますが、15の判定の時に素数であると表示されて困ってます。どなたかわかりませんか? //読み込んだ数字 n が 15 の場合 if(n == 1) System.out.println("素数ではありません。"); if(n == 2) System.out.println("素数です。"); for (int i = 2; i < n; i++) { if (n % i == 0) { System.out.println("素数ではありません。"); break; } else { System.out.println("素数です。"); break; } } --結果---------------------------------------------- 素数です

    • ベストアンサー
    • Java
  • PIC(16F84A)を使用して周波数判定を行い…

    PIC(16F84A)を使用して周波数判定を行いたいのですが…。 PICの16F84Aを使用し、周波数を判定して出力としてHIを出力する、LOWを出力するなどの判定を行うプログラムをC言語で行いたいと考えております。 例として100Hz以上の周波数が入ってきたときに、HIを出力したい場合、どういうプログラムを組めばよいのでしょうか? 周波数を判定する関数等はあるのでしょうか? よろしくお願いします。

  • 2から120以下の素数を求める

    2以上120以下の素数を全て求めて表示するプログラムを書きなさい。 素数か否かの判定には以下のアルゴリズム[処理手順] (2 <= n <= 120のときのみ有効)を用いなさい。 i) nが2, 3, 5, 7, 11のうちのどれかと等しければNは素数 ii) nが2, 3, 5, 7, 11の全てに対して割切れなければNは素数 iii) それ以外(iもiiも不成立)のとき、Nは素数ではない。 *) 2, 3, 5, 7, 11は最初に出力してしまい、 n=12から120までをfor文のなかで判定すればよい。 というC言語の課題です。 自分でプログラムを作ったのですが、うまくできません・・。 if文が働いてないようなのですが、どこが間違っているのでしょうか? #include <stdio.h> int main(void) { int i; printf("2\n"); printf("3\n"); printf("5\n"); printf("7\n"); printf("11\n"); for (i=12;i<=120;i++){ if (i%2!=0 || i%3!=0 || i%5!=0 || i%7!=0 || i%11!=0){ printf("%d\n",i); } else{ printf(""); } } printf( "\n" ); return 0; }

  • 素数判定を再帰処理で

    お世話になります。 与えられた数が素数、あるいは素数同士の積かどうかを判定するプログラムを再帰処理で書きたいのですが、どのように書いたらいいのかがわかりません。 素数判定は単に数を2から繰り返し割って、割り切れなければ次は3で繰り返し割って・・・とやればよいと思うのですが、再帰ではどのように書いたらよいのでしょうか。 出力結果は以下のようにしなければなりません。例として1173は素数同士の積かを判定します。 1173 = 391 × 3:これらの数は素数か、あるいは素数同士の積か? 391 = 23 × 17:これらの数は素数か、あるいは素数同士の積か? 23は素数。 17は素数。 よって391は素数同士の積である。(23と17は素数あるいは素数同士の積) 3は素数。 よって1173は素数同士の積である。(391と3は素数あるいは素数同士の積) 次に36でやると、 36 = 18 × 2:これらの数は素数か、あるいは素数同士の積か? 18 = 9 × 2:これらの数は素数か、あるいは素数同士の積か? 9 = 3 × 3:この数は素数か、あるいは素数同士の積か? 3は素数。 9は3の2乗、すなわち素数あるいは素数同士の積である。 2は素数。 よって18は素数同士の積である。(9と2は素数あるいは素数同士の積) 2は素数。 よって36は素数同士の積である。(18と2は素数あるいは素数同士の積) どなたかわかる方、宜しくお願いします。

    • ベストアンサー
    • Java
  • 素数判定の繰返し

    繰返し素数判定を行ない、CtrlーDで終了するプログラムをつくっています。 まず繰返しなしの素数判定プログラムを作り #include<stdio.h> int main(void) { int a,i; printf("自然数を入力:"); scanf("%d",&a); if(a<=0) printf("入力エラーです。\n"); else if(a==1) printf("1は素数ではない。\n"); else{ for(i=2; i*i<=a; i++){ if(a%i==0) break; } if(i*i>a) printf("%dは素数です。\n",a); else printf("%dは素数ではない。\n",a); } return(0); } これはちゃんとできたのですがそれを繰り返すことができません。 #include<stdio.h> int main(void) { int a,i; printf("自然数を入力:"); scanf("%d",&a); while((a=getchar())!=EOF){ if(a<=0) printf("入力エラーです。\n"); else if(a==1) printf("1は素数ではない。\n"); else{ for(i=2; i*i<=a; i++){ if(a%i==0) break; } if(i*i>a) printf("%dは素数です。\n",a); else printf("%dは素数ではない。\n",a); } printf("自然数を入力:"); scanf("%d",&a); } printf("プログラムを終了します。\n"); return(0); } これは訳わからないことになっちゃいます。。。 どうしたらいいんでしょうか??

  • カレンダーの年月入力の判定

    現在C言語でカレンダープログラムを書いています。 表示させたい年月を入力するのですが、正しい形で入力されたかの判定プログラムについてご教授いただきたいです。 具体的にはYYYY/MMまたはYYYYMMの形で入力されたかどうかを判定したいと思っています。 どのようなプログラムを書けばよろしいでしょうか。

  • 1000以下の自然数のうち素数で無いものを全て求め、それらを画面に表示

    1000以下の自然数のうち素数で無いものを全て求め、それらを画面に表示しかつそれらの和も画面に表示するC言語のプログラムを作成せよ。 わかりません。お願いいます。

  • 素数を判定するプログラム

    素数を判定するプログラムをC言語で作れという問題があったのですが、以下のものをビルドして実行したら途中で止まってしまいました。(例えば5と入力する)しかし、1以下の場合は正常にif文が評価されました。 // homework4.cpp : コンソール アプリケーションのエントリ ポイントを定義します。 #include <stdio.h> int main(int argc, char* argv[]) { int number; int n; int i; printf("1より大きい整数を入力してください: "); scanf("%d", &number); if (number <= 1) { printf("1より大きい整数を入力してください\a: "); scanf("%d", &number); } for (n = 2; n = number - 1; n++) { i = number % n; if (i = 0) { printf("%dは素数ではありません", number); break; } } printf("%dは素数です", number); return 0; } 自分ではどこがおかしいのかさっぱりわかりません。よろしくお願いします。

  • C言語の授業で

    C言語の授業で -------------------- 3以上の整数を入力してください:10 素数は以下の数です: 7 5 3 2 素数は4個ありました -------------------- という感じの、入力した数以下の素数を表示するプログラムをwhile文を用いて作成するように言われたんですが・・・。 まず、while文と素数を表示するプログラムがよくわからないので、もう何をすればいいのか・・・。 どうか、ご教授お願いします。