Я пытаюсь решить проблему, когда предельный срок очень низкий (1 секунда), и число случаев предположительно велико.
Вам нужно определить, делится ли число на 3, но проблема в том, что вы не получаете прямой номер, вы получаете число k, а затем нужно проверить, не связано ли объединение чисел из 1 к k (123... k) делится на 3.
Пример ввода:
4 // The number of cases
2
6
15
130000000
Вывод:
YES // Because 12 is divisible by 3
YES // Because 123456 is divisible by 3
YES // Because 123456789101112131415 is divisible by 3
NO
Я нашел несколько тем о быстром анализе делимости, но, по моему мнению, большинство времени занимает построение числа. Есть случаи, когда начальное число достигает 130000000 (поэтому итоговое значение 1234... 130000000), которое, как я думаю, переполняет любой тип числовых данных.
Итак, что мне здесь не хватает? Есть ли способ узнать, делится ли что-то на 3 без конкатенации числа? Любые идеи?
PD: Кто-то также разместил формулу треугольных чисел, которая также является правильным решением, а затем удалила ответ:
if ((1 + num) * num / 2) % 3 == 0 ? "YES" : "NO"