Алгоритм 2 и 3 числа
Можем ли мы с помощью определенного сложения 2 и 3 получить любое число, кроме 1 и 0?
Пример:
2+2+3=7
3+3+3+2=11
Ответы (4 шт):
Да. Любое число (больше трех) отличается от двух на 2n или на 2m + 3.
Пример.
100 - 50 двоек.
101 - 49 двоек и тройка.
102 - 51 двойка.
103 - 50 двоек и тройка.
void get(unsigned int n)
{
switch(n%3)
{
case 0: cout << n << " = 3*" << (n/3) << endl; break;
case 2: cout << n << " = 3*" << (n/3) << " + 2" << endl; break;
case 1: cout << n << " = 3*" << (n/3-1) << " + 2*2" << endl; break;
}
}
Аналогично можно для двоек - я просто пытался минимальным количеством представить...
void get2(unsigned int n)
{
if (n%2 == 0) cout << n << " = 2*" << (n/2) << endl;
else cout << n << " = 2*" << (n/2-1) << " + 3" <<endl;
}
Можно двойку представить с помощью 2. И все числа 2 + 2n с добавлением числа два. То есть можно все чётные числа. Дальше тройку можно представить числом три. И все числа 3 + 2n с добавлением числа два. Число 3 + 2n = 1 + 2(n+1) это значит, что все нечётные можно. Если можно чётные и нечётные , то это значит все начиная с два.
Это можно доказать по индукции. База: Можно получить числа 2 = 2, 3 = 2, 4 = 2 + 2.
Переход: n-3 -> n при n > 4 Действительно, если мы могли получить n - 3, то можем получить и n, добавив одну тройку.