#массивы #java
Доброго времени суток. Задача стояла такая: вводя 2 целых числа, нужно было найти все простые числа между ними. С этим быстро справился, но вторая часть задания добавляет условие: сгенерировать массив из простых чисел, найденных ранее, при условии, что среднее арифметическое модулей разностей всех элементов массива наиболее близка к целому числу P > 1 типа int. Число Р также вводится вместе с границами диапазона. Разности считаются так: если массив, например, 7 2 2 5, то среднее арифметическое будет вычисляться так ср_арф = (|7-2|+|7-2|+|7-5|+|2-2|+|2-5|+|2-5|)/6. Сломал весь мозг, но дальше прямого перебора не придумал ничего, вот что я наваял (осторожно говнокод): rezArrList.add(intArrList.get(rand.nextInt(intArrList.size()))); counter++; while (result >= p+1 || result <= p-1 || result != p){ rezArrList.add(intArrList.get(rand.nextInt(intArrList.size()))); counter++; for (int i = 0; i < rezArrList.size()-1; i++){ for (int j = 1; j < rezArrList.size(); j++){ preresult += Math.abs(rezArrList.get(i)-rezArrList.get(j)); } } result = preresult/counter; } Это срабатывает, но крайне редко, если повезет. Сейчас пытаюсь вывести формулу, но пока что-то не очень выходит.
Ответы
Ответ 1
Отсортируйте массив простых чисел от большего к меньшему. так например 7 2 2 5 -> 7 5 2 2 Далее отнимайте от семи 5, 2, 2 От 5 отнимайте 2, 2 и т.д. Количество прохождения цикла сократится вдвое. Напишите, если нужен код.
Комментариев нет:
Отправить комментарий