- ベストアンサー
ゴールドバッハの予想のプログラム
学校の課題で1000まで『ゴールドバッハの予想』を表示させないと行けないのですが全くわかりません… フローチャートだけでもわかる方おられませんか? ぜひ教えてください!!
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
1.素数の一覧表を作る 1)1000個の整数の配列を作る 2)0で初期化 3)2番目、4番目……と2の倍数毎に '1' をセットする これで、偶数にマークを付けることができた。 4)3番目、6番目……と3の倍数毎に、'1' をセットする これで、3の倍数にマークを付けることができた。 5)以下、4の倍数、5の倍数~32の倍数までマークを付ける 以上で、マークのついてないものが、素数 2.和を求める数をnとする。 1)n未満で素数であることがわかっている数字をひとつ選び出す 1.で求めた素数リストを使う 2)その数字をaとする 3)n-a が素数かどうか調べる ・n-aが素数なら、n=a+(n-a)に分解できた。 ・n-aが素数でないなら、次のaを選び直す No.1 の回答にあるのと同じ流れですが。 それと、素数リストを作るあたりは、「なぜ32までなのか」がポイントです。さらに、かなり無駄な処理が混ざっています。
その他の回答 (2)
- 麻野 なぎ(@AsanoNagi)
- ベストアンサー率45% (763/1670)
No.2 訂正です。 1.素数の一覧表を作る 1)1000個の整数の配列を作る 2)0で初期化 3)4番目、6番目……と2の倍数毎に '1' をセットする (2番目=2は素数なので、ここにはマークを付けない) これで、偶数にマークを付けることができた。 4)6番目、9番目……と3の倍数毎に、'1' をセットする (3番目=3は素数なので、ここにはマークを付けない) これで、3の倍数にマークを付けることができた。 5)以下、4の倍数、5の倍数~32の倍数までマークを付ける ですね。
- himajin100000
- ベストアンサー率54% (1660/3060)
#include <vector> #include <iostream> //思いっきり非効率だけどこんな感じかなあ。 //最初配列でやろうと思ったけど,自動的に要素数が増えないから管理が面倒そうだった。 // 比較的慣れているC#やVB.NETでやらなかったのはGeneric Listにprimitive type持たせたときのboxingの痛い思い出があるから。 //フローチャートかけないのでソースコードを勉強して読み解いてくれということで。 //言語の指定がなかったのでC++のつもり。コンパイラは //Thread model: win32 gcc version 3.4.5 (mingw special) std::vector<int> getPrimeNumbers(int n){ std::vector<int> v; bool isprime; v.push_back(2); int i; int j; for (i = 3; i <= n; i++){ isprime = true; for (j = 2; j <= i - 1 ;j++){ if ( i % j == 0){ isprime = false; } } if (isprime == true){ v.push_back(i); } } return v; } int main(){ for (int n = 6; n <= 1000; n = n + 2){ std::vector<int> v = getPrimeNumbers(n); bool found = false; for (std::vector<int>::iterator Iter = v.begin(); Iter != v.end(); Iter++){ for (std::vector<int>::iterator Iter2 = v.begin(); ((Iter2 != v.end()) && (found == false)); Iter2++){ if ( (*Iter2) == ( n - (*Iter))){ found = true; std::cout << n << " = " << (*Iter) << " + " << (*Iter2) << std::endl; } } } if (found == false){ std::cout << n << " = " << "failed" << std::endl; } } }
お礼
回答ありがとうございます!! プログラムの言語はFORTRANでした。 この回答への補足に書いていたので、遅くなって済みません…
補足
プログラムの言語はFORTRANです!! 遅くなって済みません…