1) AB mod C, (1 ≤ A, B, C < 263).
При меньших входящих числах я решил задачу методом постепенного возведения в квадрат. Но при данных числах задача будет решена частично, потому что в вычислениях есть операция d*d mod c (d-переменная, которая может принимать максимальное значение 263 -1). Сначала вычисляется d*d и на этом шагу число не помещается в типы данных. Есть ли способ, который помог бы избежать этого?
2) Извлечение корня квадратного ( только целого числа) из длинного числа A.
Я пробывал решить задачу методом половинного деления, но при A=10100 программа уже работает примерно 2 сек. Есть ли алгоритм, который вычисляет корень быстрее и если да, то какой его принцып работы?
1) Умножать два числа можно так же как и возводить в степень. Например
А насчёт второй: можно написать алгоритм вычисления квадратного корня в столбик
sqrt(x)=x^(1/2)=e^(ln(p^(1/2)))=e^(ln(p)/2)
а x можно сделать double'ом
тогда на Си это будет выглядеть exp(log(x)/2)
UPD Извините, видимо, неправильно понял задачу
1) обсуждалось здесь Перемножение long long по модулю
2) можно почитать этот алгоритм acmp.ru, он даже роботает на 10^3000
вторую задачу можно здавать здесь Длинный корень там 10^100