我的代码在
#include <iostream>
#include <string>
#include <algorithm>
#include <climits>
#include <vector>
#include <cmath>
using namespace std;
struct State {
int v;
const State *rest;
void dump() const {
if(rest) {
cout << ' ' << v;
rest->dump();
} else {
cout << endl;
}
}
State() : v(0), rest(0) {}
State(int _v, const State &_rest) : v(_v), rest(&_rest) {}
};
void ss(int *ip, int *end, int target, const State &state) {
if(target < 0) return; // assuming we don't allow any negatives
if(ip==end && target==0) {
state.dump();
return;
}
if(ip==end)
return;
{ // without the first one
ss(ip+1, end, target, state);
}
{ // with the first one
int first = *ip;
ss(ip+1, end, target-first, State(first, state));
}
}
vector<int> get_primes(int N) {
int size = floor(0.5 * (N - 3)) + 1;
vector<int> primes;
primes.push_back(2);
vector<bool> is_prime(size, true);
for(long i = 0; i < size; ++i) {
if(is_prime[i]) {
int p = (i << 1) + 3;
primes.push_back(p);
// sieving from p^2, whose index is 2i^2 + 6i + 3
for (long j = ((i * i) << 1) + 6 * i + 3; j < size; j += p) {
is_prime[j] = false;
}
}
}
}
int main() {
int N;
cin >> N;
vector<int> primes = get_primes(N);
int a[primes.size()];
for (int i = 0; i < primes.size(); ++i) {
a[i] = primes[i];
}
int * start = &a[0];
int * end = start + sizeof(a) / sizeof(a[0]);
ss(start, end, N, State());
}
它需要一个输入N(int),并获得小于N的所有素数的vector
。
然后,它会从vector
中找到与N
相加的唯一集合数。
get_primes(N)
有效,但另一个没有。
我借用了其他代码 How to find all matching numbers, that sums to 'N' in a given array
请帮帮我..我只想要一套独特的套装。
答案 0 :(得分:1)
您在return primes;
功能结束时忘记了get_primes()
。
答案 1 :(得分:1)
我猜测问题是:
vector<int> get_primes(int N) {
// ...
return primes; // missing this line
}
按原样,你只是在这里写一些垃圾:
vector<int> primes = get_primes(N);
它的未定义行为 - 在这种情况下表现为崩溃。