C ++-458
이것은 하위 집합의 합계를 계산하는 데 도움을 요청하기 위해 내 솔루션이 아닌 모든 것이 내 것입니다.
#include<iostream>
#include<vector>
using namespace std;
#define v vector<int>
#define r return
#define c const_iterator
v x(int i){v d;for(int k=1;k<i;k++)if(i%k==0)d.push_back(k);r d;}bool u(v::c i,v::c e,int s){if(s==0)r 0;if(i==e)r 1;r u(i+1,e,s-*i)&u(i+1,e,s);}bool t(v&d,int i){bool b=u(d.begin(),d.end(),i);if(b)cout<<i<<endl;r b;}int main(){v d;int n;cin>>n;for(int i=2,j=0;j<n;i++){d=x(i);int l=0;for(int k=0;k<d.size();k++)l+=d[k];if(l>i)if(t(d,i))j++;}}
긴 버전 :
#include<iostream>
#include<vector>
using namespace std;
vector<int> divisors(int i) {
vector<int> divs;
for(int k = 1; k < i; k++)
if(i%k==0)
divs.push_back(k);
return divs;
}
bool u(vector<int>::const_iterator vi, vector<int>::const_iterator end, int s) {
if(s == 0) return 0;
if(vi == end) return 1;
return u(vi + 1, end, s - *vi) & u(vi + 1, end, s);
}
bool t(vector<int>&d, int i) {
bool b = u(d.begin(), d.end(), i);
if(b) cout<< i << endl;
return b;
}
int main() {
vector<int> divs;
int n;
cin>>n;
for(int i = 2, j = 0; j < n; i++) {
divs = divisors(i);
int sum_divs = 0;
for(int k = 0; k < divs.size(); k++)
sum_divs += divs[k];
if(sum_divs > i)
if(t(divs, i))
j++;
}
}
현재 처음 두 개 (70과 836) 만 계산했습니다. 그 후 나는 그것을 죽였다.