Как вынести число n из под квадратного корня, не используя математические функции?
Самое банальное, что приходит в голову - последовательно в цикле перебирать числа от одного до n. Каждое число умножать само на себя, пока не получится заданное число.
А какие функции не считаются «математическими»? Деление можно или нельзя?
Найдём сначала все делители и запихнём в массив 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. Конечно, можно сделать красиво -- всё в одном цикле, сразу вычисляя выносимое и подкорневой остаток. Приведённый неоптимальный алгоритм -- первое что в голову пришло. Дальнейшую оптимизацию, думаю, осилите сами.