2. Тип 14 № 61394 
Кодирование чисел. Системы счисления. Операции в одной СС
i
В числе 21x457y937 x и y обозначают некоторые цифры из алфавита системы счисления с основанием 37. Определите такие значения x и y, при которых приведённое число кратно 36, а число xy37 имеет наибольшее возможное значение. В ответе запишите значение числа xy37 в десятичной системе счисления.
Решение. Приведём решение на языке Python.
c = []
for x in range(1,37):
for y in range(0,37):
t = 2*37**7+1*37**6+x*37**5+4*37**4+5*37**3+7*37**2+y*37**1+9
if t % 36 == 0:
c.append(x*37**1+y)
print(max(c))
Ответ: 1340.
Приведём решение Юрия Красильникова.
В решении используется функция num(digits,base). Digits — список целых чисел, содержащий числовые значений цифр числа в системе счисления по основанию base. Функция возвращает значение числа, записанного этими цифрами.
def num(digits,base):
n=0
for d in digits:
n=n*base+d
return n
a=[num([y,x],37) for x in range(1,37) for y in range(37) if num([2,1,x,5,4,7,y,9],37)%36==0]
print(max(a))
Приведём решение Ильи Андрианова на языке Python.
def my_int(n: list, b: int):
return sum(x * b**i for i, x in enumerate(n[::-1]))
R = []
for x in range(0, 37):
for y in range(0, 37):
A = my_int([2, 1, x, 4, 5, 7, y, 9], 37)
if A % 36 == 0:
R.append(my_int([x, y], 37))
print(max(R))
Приведём решение Сергея Донец на PascalABC.NET:
function ToNm(digs: array of integer; base: integer): int64;
begin Result := 0;
foreach var d in digs do // Схема Горнера
Result := Result * base + d;
end;
begin
var p := 37;
var maxVal := -1;
var s:='21x457y9';// N=21x457y9₃₇ k=xy₃₇
for var x := 0 to p - 1 do
for var y := 0 to p - 1 do begin
var number:=s // массив цифр числа
.Select(ch -> ch.IsDigit ? ch.ToDigit : ch = 'x'?x : ch = 'y'?y : 0)
.ToArray;
var num := ToNm(number, p);
if num mod 36 = 0 then
begin
var xy := ToNm([x, y], p);//k=xy₃₇
if xy > maxVal then maxVal := xy;
end;
end;
maxVal.Print;
end.
Ответ: 1340