Ответы пользователя по тегу Java
  • Как вынести число n из под квадратного корня, не используя математические функции?

    @AquiHostStrider
    А какие функции не считаются «математическими»? Деление можно или нельзя?
    Найдём сначала все делители и запихнём в массив d.

    целое i=0, k=2, l=n, массив целое d[n/2];
    пока k<l/2 {
     если k*(l/k)==l { l=l/k; d[i]=k } иначе { k=k+1 }
     i=i+1
    }
    d[i]=l


    Потом перебираем по очереди все элементы полученного массива, в котором будут делители n. Если текущий элемент равен следующему, то берём его как делитель выносимой части и следующий элемент в массиве пропускаем. Если нет, то берём его как делитель невыносимой из-под корня части, и следующий элемент не пропускаем. Если он вообще равен нулю, то значит, что массив закончился, и нужно вернуть результат -- вынесенное число и подкорневой остаток.

    P.S. Конечно, можно сделать красиво -- всё в одном цикле, сразу вычисляя выносимое и подкорневой остаток. Приведённый неоптимальный алгоритм -- первое что в голову пришло. Дальнейшую оптимизацию, думаю, осилите сами.
    Ответ написан
    Комментировать