您的位置:首页 > 其它

Primes Product

2016-07-07 02:15 253 查看
Suppose we can primes [2, 3, 5]. We should get [2, 3, 5, 6, 10, 15, 30].

1: First method, solve it recursively. 

#include "header.h"
using namespace std;

void primeProduct(vector<int>& nums, vector<int>& res, int product, int pos) {
if(pos > nums.size()) {
return;
}
if(product != 1) {
res.push_back(product);
}
for(int i = pos; i < nums.size(); ++i) {
if(i > pos && nums[i] == nums[i-1]) continue;
primeProduct(nums, res, product * nums[i], i + 1);
}
}

vector<int> primeProduct(vector<int>& nums) {
vector<int> res;
int product = 1;
int pos = 0;
primeProduct(nums, res, product, 0);
return res;
}

int main(void) {
vector<int> nums{2, 3, 5};
vector<int> res = primeProduct(nums);
for(int i = 0; i < res.size(); ++i) {
cout << res[i] << " ";
}
cout << endl;
}


2: Solve is iteratively using bitmap, same idea as subset.

#include "header.h"
using namespace std;

vector<int> uniquePrimes(vector<int>& primes) {
int n = primes.size();
int mask = 1 << n;
vector<int> res;
for(int i = 1; i < mask; ++i) {
int product = 1;
for(int j = 0; j < primes.size(); ++j) {
if(i & (1 << j)) product *= primes[j];
}
res.push_back(product);
}
return res;
}

int main(void) {
vector<int> primes {2, 3, 5};
vector<int> res = uniquePrimes(primes);
for(int i = 0; i< res.size(); ++i) cout << res[i] << " ";
cout << endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: