// PascalABC.NET 3.6.3
uses School;
function Divizors(n: integer): List<integer>;
begin
var L := new List<integer>;
L.Add(1);
L.Add(n);
if n > 3 then
begin
var k := 2;
while (k * k <= n) and (k < 46341) do
begin
if n mod k = 0 then
begin
var t := n div k;
L.Add(k);
if k < t then L.Add(t)
else break
end;
Inc(k)
end;
L.Sort;
end;
Result := L
end;
begin
// 1
if ReadInteger.IsPrime then Println('YES')
else Println('NO');
// 2
ReadInteger.Factorize.First.Println;
// 3
var a := Divizors(ReadInteger);
Print(a.Count, a.Sum)
end.
63ₓ = 3x⁰+2x¹+a₂x²+a₃x³+...
Понятно, что х>3, поскольку в системах счисления с x≤3 невозможно записать цифру 3.
Пусть x=4. x²=16, x³=64, ...
Поскольку даже минимально возможное значение х в третьей степени превышает 63, можно утверждать, что степеней выше 3 в представлении числа 63 нет.
Следовательно, 63=ax²+2x+3, ax²+2x-60=0, x=4,5,6, ...
Если х=8, то х²=64, поэтому для x>7 получаем а=0 и уравнение приобретает вид 2х-60=0 ⇒ х=30. Первое значение х найдено.
При х=4,5,6,7 получаем a=(60-2x)/x², a>0.
x=4 ⇒ a=(60-2×4)/4² = 52/16 = 4 - целое, подходит
x=5 ⇒ a=(60-2×5)/25 = 50/25 =2 - целое, подходит
x=6 ⇒ a=(60-2×6)/36 = 48/36 - нецелое
x=7 ⇒ a=(60-2×7)/49 = 46/49 - нецелое
Получили три значения x: 4, 5, 30
Проверим их.
1)х=4
63/4 = 15, остаток 3
15/4 = 3, остаток 2
3/4 = 0, остаток 3
Выписываем остатки в обратном порядке: 63=323₄
2) х=5
63/5 = 12, остаток 3
12/5 = 2, остаток 2
2/6 = 0, остаток 2
Выписываем остатки в обратном порядке: 63=223₅
3)х=30
63/30 = 2, остаток 3
2/30 = 0, остаток 2
Выписываем остатки в обратном порядке: 63=23₃₀
ответ: 4, 5, 30
10(2) = 2(10)
11(2) = 3
100(2) = 4
101(2) = 5
110(2) = 6
111(2) = 7
Складываем, получаем: 2 + 3 + 4 +5 + 6 + 7 = 27(10)