#include <bits/stdc++.h>
using namespace std;
int maks_potega_2(int a){
int i = 0;
while (a % (1 << (i + 1)) == 0){
i++;
}
return i;
}
int main(){
int n;
cin >> n;
int T[1000001];
int suma = 0;
int indeks = 0;
vector <int> W;
T[0] = 0;
while (suma < n){
indeks++;
T[indeks] = T[indeks - 1]+ 1 - maks_potega_2(indeks);
suma += T[indeks];
}
int roznica = suma - n;
while (indeks > 0){
if (T[indeks] <= roznica){
roznica -= T[indeks];
}
else{
W.push_back(indeks);
}
indeks--;
}
printf("%d \n",W.size());
for (int i= 0; i < W.size();i++){
printf("%d ",W[i]);
}
}
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 | #include <bits/stdc++.h> using namespace std; int maks_potega_2(int a){ int i = 0; while (a % (1 << (i + 1)) == 0){ i++; } return i; } int main(){ int n; cin >> n; int T[1000001]; int suma = 0; int indeks = 0; vector <int> W; T[0] = 0; while (suma < n){ indeks++; T[indeks] = T[indeks - 1]+ 1 - maks_potega_2(indeks); suma += T[indeks]; } int roznica = suma - n; while (indeks > 0){ if (T[indeks] <= roznica){ roznica -= T[indeks]; } else{ W.push_back(indeks); } indeks--; } printf("%d \n",W.size()); for (int i= 0; i < W.size();i++){ printf("%d ",W[i]); } } |
English