素因数分解と一般的な因子で2つの数mとnのgcdを計算したい。 このようにする。例を取るM = 36、N = 48集合交差点
vector<int> factors1 = prime_factorization(m); // 2 2 3 3
vector<int> factors2 = prime_factorization(n); // 2 2 2 2 3
vector<int> intersection(10);
set_intersection(factors1.begin(), factors1.end(), factors2.begin(), factors2.end(), intersection.begin());
交差点は今、この2 2 3 0 0 0 0 0 0 0である。私は、予めベクトルの大きさを設定する必要があります。残りの要素も0に設定されています。これは起こりたくありません。
これを行うより良い方法はありますか?セットなどを使用していますか?
また、ゼロを無視してstlを使用してベクトル交点(2 * 2 * 3)の要素の積を計算するにはどうすればよいですか?このようEuclid's algorithmとしてGCDを決定するためのより良い方法があること
はvector<int> intersection;
set_intersection(..., back_inserter(intersection));
注:
このように設定していますか?ユークリッドのGCDアルゴリズムがこれにはるかに優れているからです。 –
@Null set私はeuclidを知っていますが、異なる方法でgcdを計算したかっただけです。 –
因子が主要な**力として表されている方が良いです。また、分解の後、素因数がソートされるので、intrsectionは計算がずっと簡単になります。 – ruslik