Java: CharBuffer «игнорирует» смещение массива?

Я не знаю, опаздываю ли я, но я оставлю это здесь, чтобы помочь кому-то в будущем.

Мы используем квадратный корень из (n), то есть int (n ** 0,5), чтобы уменьшить диапазон чисел, которые ваша программа будет вынуждена вычислять.

Например, мы можем выполнить пробное деление, чтобы проверить правильность 100. Давайте посмотрим на все делители 100:

2, 4, 5, 10, 20, 25, 50 Здесь мы видим, что наибольший коэффициент равен 100/2 = 50. Это верно для всех n: все делители меньше или равны n / 2. Если мы более подробно рассмотрим дивизоров, мы увидим, что некоторые из них являются избыточными. Если мы будем писать список по-разному:

100 = 2 × 50 = 4 × 25 = 5 × 20 = 10 × 10 = 20 × 5 = 25 × 4 = 50 × 2 избыточность становится очевидной. Как только мы достигнем 10, что составляет √100, делители просто поворачиваются и повторяются. Поэтому мы можем дополнительно исключить тестовые делители, превышающие √n.

Возьмем другое число, например 16.

Его делители равны 2,4,8

16 = 2 * 8, 4 * 4, 8 * 2.

Вы можете заметить, что после достижения 4, являющегося квадратным корнем из 16, мы повторили 8 * 2, которые мы уже сделали как 2 * 8 , Этот шаблон верен для всех чисел.

Чтобы избежать повторения, мы, таким образом, проверяем на соответствие с квадратным корнем числа n.

Итак, мы преобразуем квадратный корень в int потому что нам не нужен диапазон с плавающими числами.

Прочтите тест прочности на wikipedia для получения дополнительной информации.

1
задан java.is.for.desktop 21 June 2010 в 15:45
поделиться

2 ответа

CharBuffer.wrap(char[], int, int):

Его резервный массив будет заданным массивом, а смещение массива будет равно нулю.

Изучая записи в CharBuffer.offset, похоже, что HeapCharBuffer и StringCharBuffer могут иметь ненулевые arrayOffsets().

1
ответ дан 2 September 2019 в 23:36
поделиться

Вы можете использовать позицию для достижения аналогичных результатов, я думаю. Не используйте перемотку, поскольку она устанавливает позицию в 0; вместо этого используйте сброс.

1
ответ дан 2 September 2019 в 23:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: