На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом. 1. Строится двоичная запись числа N.
2. К этой записи дописываются ещё два разряда по следующему правилу:
а) если N чётное, то к нему справа приписываются две последние цифры его двоичной записи;
б) если N нечётное, то к нему справа и слева приписывается цифра 1.
Полученная таким образом запись (в ней на два разряда больше, чем в записи исходного числа N) является двоичной записью искомого числа R.
Например, двоичная запись нечётного числа 110012 будет преобразована в 11100112.
Укажите такое наименьшее число R, превышающее 130, которое может являться результатом работы данного алгоритма.
В ответе это число запишите в десятичной системе счисления
(см. объяснение)
Объяснение:
Ниже показано решение на различных языках программирования + аналитический метод.
Java:
System.out.println(BigInteger.valueOf(2).pow(102).add(BigInteger.valueOf(2).pow(100)).add(BigInteger.valueOf(2).pow(85)).add(BigInteger.valueOf(2).pow(17)).toString(8));
Pascal:
##
var res: BigInteger := BigInteger.Add(BigInteger.Add(BigInteger.Add(BigInteger.Pow(BigInteger.Parse('2'),102),BigInteger.Pow(BigInteger.Parse('2'),100)),BigInteger.Pow(BigInteger.Parse('2'),85)),BigInteger.Pow(BigInteger.Parse('2'),17));
var s: string := '';
while(not res.IsZero) do
begin
s:= BigInteger.Remainder(res,8).ToString+s;
res:= BigInteger.Divide(res,BigInteger.Parse('8'));
end;
writeln(s);
Python:
a = 2**102+2**100+2**85+2**17
s = ''
while(a>0):
s=str(a%8)+s
a//=8
print(s)
Аналитический метод:
Нужно представить все, как <число>*8^[степень]. Заметим, что:
Результат полученный во всех случаях одинаковый:
12000020000000000000000000000400000
Это означает, что всего в числе встречается 4 различные цифры.
Задание выполнено!
Для каждого груза можешь привести
Данный груз + некая гиря = противовес
1 + 0 = 1
2 + 1 = 3
3 + 0 = 3
4 + 0 = 3+1
5 + 3+1 = 9
6 + 3 = 9
7 + 3 = 9+1
8 + 1 = 9
9 + 0 = 9
10 + 0 = 9+1
11 + 1 = 9+3
12 + 0 = 9+3
13 + 0 = 9+3+1