Primes Product

来源:互联网 发布:vmware软件购买 编辑:程序博客网 时间:2024/06/06 05:19

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;}


0 0
原创粉丝点击