アプリ版:「スタンプのみでお礼する」機能のリリースについて

学校の課題で1000まで『ゴールドバッハの予想』を表示させないと行けないのですが全くわかりません…
フローチャートだけでもわかる方おられませんか?
ぜひ教えてください!!

A 回答 (3件)

#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です!!
遅くなって済みません…

補足日時:2008/06/20 02:00
    • good
    • 0
この回答へのお礼

回答ありがとうございます!!
プログラムの言語はFORTRANでした。
この回答への補足に書いていたので、遅くなって済みません…

お礼日時:2008/06/20 02:33

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までなのか」がポイントです。さらに、かなり無駄な処理が混ざっています。
    • good
    • 0

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の倍数までマークを付ける

ですね。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!