#include <bits/stdc++.h> using namespace std; int n, k, m, res[1000001], sum[1000001]; void in() { scanf("%d", &n); } void calc() { int i = 0; do { ++i; sum[i] = sum[i - 1] + __builtin_popcount(i); } while(sum[i] < n); while(n) { if(sum[i - 1] < n) { res[m++] = i; n -= sum[i] - sum[i - 1]; } --i; } } void out() { printf("%d\n", m); for(int i = 0; i < m; ++i) printf("%d ", res[i]); } int main() { in(); calc(); out(); }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | #include <bits/stdc++.h> using namespace std; int n, k, m, res[1000001], sum[1000001]; void in() { scanf("%d", &n); } void calc() { int i = 0; do { ++i; sum[i] = sum[i - 1] + __builtin_popcount(i); } while(sum[i] < n); while(n) { if(sum[i - 1] < n) { res[m++] = i; n -= sum[i] - sum[i - 1]; } --i; } } void out() { printf("%d\n", m); for(int i = 0; i < m; ++i) printf("%d ", res[i]); } int main() { in(); calc(); out(); } |