①一つの数の素数を、全て求める
②配列に格納する。
2つ目の数の素数を、全て求める
配列に格納する。
③重複するものを、取り除き、出力する
といった方法です。
一つ一つの部品は、出来ていますが、全体を組み合わせることが出来ません。
①は、エラトステネスの篩を使いました。
②は、vector に格納しました
③は、sortで、昇順にして、uniqueで重複を取り除き、eraseで、0を消しました。
このvector をcoutすると、素数を上書きして全て求められます。
この関数を一般化(クラス化)して、main関数内で、1個目、2個目の数に対し、それぞれ①②を実行して、最後にまとめて、③を実行する
//basic.h #ifndef Samp_H #define Samp_H #include<vector> class gcd { public: void set(); void into(); vector get(); vector<int> result; private: int M; }; #endif
//basic.cpp #include "basic.h" #include<iostream> #include<vector> #include<iterator> #include<algorithm> #include<functional> using namespace std; void gcd::set() { int num; cin >> num; M = num; } void gcd::into() { int m = 2, n = 0; vector<int>data1; vector<int>result1; vector<int>::iterator d1 = begin(data1); vector<int>::iterator r1 = begin(result1); vector<int>result; for (int i = 0; i <= M + 1; i++) { data1.push_back(1); result1.push_back(0); } data1[0] = 0; data1[1] = 0; int i = 2 * m; /*for (int i = 0; i < data1.size(); i++) { cout<<data1[i]<<""; }*/ do { for (i = 2 * m; i <= M; i += m) { data1[i] = 0; } result1[n] = m; n++; do { m++; } while ((data1[m] == 0) && (m <= M)); } while (m <= M); /*for (vector<int>::iterator l = begin(result1); l != end(result1); l++) { cout << *l << endl; }*/ for (vector<int>::iterator l = begin(result1); l != end(result1); l++) { result.push_back(*l); } l = begin(result1); } std::vector<int> gcd::get() { return result; }
//main.cpp #include "basic.h" using namespace std; int main() { gcd obj1,obj2; vector<int>ppp; obj1.set(); obj1.into(); ppp=obj1.get(); obj2.set(); obj2.into(); ppp = obj2.get(); }
basic.hファイルで、get()で、素数が入っているvector をreturnしたいですが、
型の指定でエラーになります。
vector<int>で良いのでしょうか。
クラスの使い方や、部品のまとめ方?が分からず、詰まっています。
詳しい方にアドバイスを伺いたいです。
以下修正↓
自分が、詰まっている点は、
10→クラスの関数→(2.3.5.7.9)
14→クラスの関数→(2.3.5.7.9.11.13)
これ(2つの結果)をメイン関数で、どうやって、一つの配列なり、ベクターで格納するかです。
回答4件
あなたの回答
tips
プレビュー