x = (x + 1) / k * k - 1
x = x - (k - (x % k) - 1)
Получение максимального числа X кратного K
Попутно вывел две формулы, которые дают верные результаты только при k < 2. А нужно для любого целого числа... Вот они:
Код:
Получить нужно наибольшее кратное числа X, меньшее числа X + 1.
Если объяснил непонятно, то вот табличка вывода:
Код:
1 | 1 = 1
2 | 1 = 2
3 | 1 = 3
4 | 1 = 4
1 | 2 = 1
2 | 2 = 1
3 | 2 = 3
4 | 2 = 3
1 | 3 = 1
2 | 3 = 1
3 | 3 = 1
4 | 3 = 4
5 | 3 = 4
6 | 3 = 4
7 | 3 = 7
2 | 1 = 2
3 | 1 = 3
4 | 1 = 4
1 | 2 = 1
2 | 2 = 1
3 | 2 = 3
4 | 2 = 3
1 | 3 = 1
2 | 3 = 1
3 | 3 = 1
4 | 3 = 4
5 | 3 = 4
6 | 3 = 4
7 | 3 = 7
Буду очень благодарен, если кто-нибудь сможет помочь. У меня уже мозг отказывается соображать... =\
P.S. Хотелось бы именно формулу, а не связку условий...
Естественно, решение нашлось сразу, после создания темы. Ответ:
Код:
x = (x - 1) / k * k + 1
Видимо, перечитав свой пост, я наконец понял чего хочу и как этого добиться... :)
Всем спасибо, извините за беспокойство. :)
Подозреваю, что ты ищешь алгоритм Наибольшего Общего Делителя?
Кстати, раз зашел разговор о НОДе, рекомендую посмотреть лекцию Степанова в Яндексе: "Самый Главный Алгоритм".