У меня есть набор заданных целых чисел:
A[] = { 2, 3, 4, 5, 6, 7, 8, 10, 15, 20, 25, 30, 40, 50, 100, 500 }
Я хочу проверить, можно ли записать данное целое число T
как кратное число в A[]
;РЕДАКТИРОВАТЬ УТОЧНЕНИЕ: можно использовать любое число в A [] . При использовании можно использовать только один раз.Пример 60 является действительным T.60 = 30 * 2.AlSO 90 действителен.90 = 3 * 5 * 6
Проверьте , какие числа могут образовать это целое число T
.
- Также вернуть 2 ближайших целых числа к данному
T
(которые могут быть записаны таким образом), если число T
не может быть записано как кратное число этих чисел.
Части 2 и 3Я думаю, что смогу разобраться со своим, если кто-то поможет мне с частью 1.
Я знаю, что это алгоритмический или даже математический вопрос, но если кто-то может помочь, пожалуйста, сделайте.
НЕ РАБОТАЕТ.СМ. КОММЕНТАРИЙ НИЖЕ.
#
РЕШЕНИЕ.ОЧЕНЬ ОЧЕНЬ БОЛЬШОЙ ДЛЯ ВСЕГО ОТВЕТА. 1 (но автор решил удалить его, и я не знаю, почему, поскольку он был правильным.) Автор (не помню вашего имени.)
#
Код решения с поворотом (авторский алгоритм использовал несколько раз один множитель. Этот алгоритм использует множитель только 1 раз)
int oldT = 0;
HashMap<Integer, Boolean> used = new HashMap<Integer, Boolean>();
while (T != 1 && T != -1) {
oldT = T;
for (int multiple : A) {
if (!used.containsKey(multiple)) {
if (T % multiple == 0) {
T = T / multiple;
used.put(multiple, true);
}
}
}
if (oldT == T)
return false;
}
return true;