我想通过素数分解和考虑共同因子来计算两个数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)中元素的乘积?
答案 0 :(得分:12)
您可以使用back-inserter:
vector<int> intersection;
set_intersection(..., back_inserter(intersection));
请注意,有更好的方法可以确定GCD,例如Euclid's algorithm。
答案 1 :(得分:5)
奥利的答案在你所描述的情况下是最好的。但是如果你使用的是已经存在的矢量并且你正在编写的元素,并且你想要删除额外的数字,你可以采用不同的方式。通过使用set_intersection的返回值调用向量成员erase
:
intersection.erase(
set_intersection(factors1.begin(), factors1.end(), factors2.begin(), factors2.end(), intersection.begin()),
intersection.end());