• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:   #include<stdio.h> )

#include <stdio.h>を使ったプログラムで最大の素数を求める方法

このQ&Aのポイント
  • int型(符号付32ビット整数)および、unsigned int型(符号なし32ビット整数)のそれぞれの最大の素数を求めるプログラムがあります。
  • エラトステネスのふるいを使わずに、上のプログラムを改良してみましょう。
  • 具体的な改良方法や回答をご教示します。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

最初に。 このプログラム、ところどころ打ち間違いがあります。直しておきましょう。 i(n>=2){ limit=(int)sqrt(n); for(i=limit;i>=1;i--){ まず、プログラムを、機能ごとに分けて考えます。 printf("data? "); scanf("%d",&n); が素数判定する数値nを決めるところ if(n>=2){ から return 0 ; の前の } までがn が素数かの判定しているところ です。 では、改造に入ります。 intの範囲での最大の素数、ということなので、 intの最大値 から順番に素数判定を行い、最初に見つかった素数が、求める値、となります。 元はnをキーボードから入力しています。 これをキーボード入力ではなく、プログラム中で「intの最大値 から順番に」するには、どうしたらいいと思いますか? 元の判定部は if(i==1) printf("素数\n); else printf("素数でない\n"); です。これは n に対して「素数/素数でない」と表示されます。 改造するときに ・「素数でない」という表示は必要でしょうか? ・「素数」という表示ではnはわかりません。 nも表示するにはどうしたらいいと思いますか? ・素数が見つかったら、ループを抜けないと、int型の全ての素数を表示するプログラムになってしまいます。ループを抜けるにはどうしたらよいでしょうか? 以上の考えかたで、改造できると思いますが、いかがでしょうか。 unsigned int版へは次の2点を変更します。 ・計算に使う変数はunsigned intにする必要がある。 ・nはunsigned intの最大値から順番に

すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.2

このプログラムは入力された数値が素数か素数でないかを判定するプログラムです。 (ifがiになっていたりカッコが足りなかったりダブルクォーテーションが足りなかったりしていますが、おそらくコピペミス?) ということは、 1.このmain関数をsub関数にして 2.scanfで読み込む箇所は引数で渡してもらって 3.素数なら1そうでなければ0を返すようにして 4.main関数でsub関数を数分呼び出し 5.subから1が戻ってくる毎に値を更新していけば 求めるプログラムとなります。

saya1001
質問者

補足

すみません。私はC言語の知識が薄くあなた様が述べたやり方を言われても分からないので、プログラムで表すとこうなるみたいなのを教えてください。

すると、全ての回答が全文表示されます。
  • koi1234
  • ベストアンサー率53% (1866/3459)
回答No.1

値の入力で scanf 関数で行っているとこを for ループにして (全体の処理を for ループで回して) 一番最初に素数が見つかったら終了すればいいだけなのでは? ループが最大値から0になるようにループさせればいいだけだと思いますが わざわざこちらがコード提示しないと上に書いたことすら分からない ってレベルですか?

saya1001
質問者

お礼

私はまだこのようなレベルのプログラミングまで覚えきれてないのでわかりません。

すると、全ての回答が全文表示されます。

関連するQ&A