n = int(input()) # print("n", n) def dec_to_bin(nr): if nr == 0: return "0" out = "" while nr > 0: if nr % 2 == 1: out = "1" + out else: out = "0" + out nr = nr // 2 return out def ile_jedynek(k): txt = dec_to_bin(k) o = 0 for i in range(len(txt)): if txt[i] == "1": o += 1 # print("k", k, "jjj", o) return o wynik = [] i = 1 jedynek = 0 while jedynek < n: jedynek = i * (2**(i-1)) liczba = (2**i - 1) potega = i # print("liczba:",liczba, "#jedynek:", jedynek, " i:", i) i += 1 # print("\njedynek", jedynek, "liczba", liczba) if jedynek == n: for i in range(1, liczba + 1): wynik.append(i) # print("ok ...", wynik) else: za_duzo = jedynek - n # print("za duzo o", za_duzo, "zmniejszamy...") # e() j = potega - 1 # while za_duzo - jedynek2 > 0: z = 1 while j > 0: # z = z + 1 jedynek2 = j * (2**(j-1)) + (2**(j-1))*z - (j-1) * (2**(j-2)) # print("jedynek2", jedynek2, " ---- j:", j, "a1:", (2**(j-1)), "a2:", (2**(j-1)), "z:", z) if za_duzo - jedynek2 > 0: za_duzo = za_duzo - jedynek2 cof = (2**(j-1)) liczba = liczba - cof # print("cofamy się o ", cof, "do liczby:", liczba, "odejmujac jedynek2:", jedynek2) else: z = z + 1 j = j - 1 # print("liczba3:", liczba, "za_duzo", za_duzo) for i in range(1, liczba + 1): wynik.append(i) while za_duzo > 0: x = ile_jedynek(liczba) if x <= za_duzo: za_duzo = za_duzo - x wynik.remove(liczba) # print("wyrzucamy liczbe:", liczba) liczba = liczba - 1 wynik.reverse() print(len(wynik)) print(*wynik, sep = " ")
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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | n = int(input()) # print("n", n) def dec_to_bin(nr): if nr == 0: return "0" out = "" while nr > 0: if nr % 2 == 1: out = "1" + out else: out = "0" + out nr = nr // 2 return out def ile_jedynek(k): txt = dec_to_bin(k) o = 0 for i in range(len(txt)): if txt[i] == "1": o += 1 # print("k", k, "jjj", o) return o wynik = [] i = 1 jedynek = 0 while jedynek < n: jedynek = i * (2**(i-1)) liczba = (2**i - 1) potega = i # print("liczba:",liczba, "#jedynek:", jedynek, " i:", i) i += 1 # print("\njedynek", jedynek, "liczba", liczba) if jedynek == n: for i in range(1, liczba + 1): wynik.append(i) # print("ok ...", wynik) else: za_duzo = jedynek - n # print("za duzo o", za_duzo, "zmniejszamy...") # e() j = potega - 1 # while za_duzo - jedynek2 > 0: z = 1 while j > 0: # z = z + 1 jedynek2 = j * (2**(j-1)) + (2**(j-1))*z - (j-1) * (2**(j-2)) # print("jedynek2", jedynek2, " ---- j:", j, "a1:", (2**(j-1)), "a2:", (2**(j-1)), "z:", z) if za_duzo - jedynek2 > 0: za_duzo = za_duzo - jedynek2 cof = (2**(j-1)) liczba = liczba - cof # print("cofamy się o ", cof, "do liczby:", liczba, "odejmujac jedynek2:", jedynek2) else: z = z + 1 j = j - 1 # print("liczba3:", liczba, "za_duzo", za_duzo) for i in range(1, liczba + 1): wynik.append(i) while za_duzo > 0: x = ile_jedynek(liczba) if x <= za_duzo: za_duzo = za_duzo - x wynik.remove(liczba) # print("wyrzucamy liczbe:", liczba) liczba = liczba - 1 wynik.reverse() print(len(wynik)) print(*wynik, sep = " ") |