Здравствуйте, falcon17, Вы писали:
F>unsigned long mulrest(unsigned long a,unsigned long b,unsigned long c)
F>{
F> unsigned long A[2], B[2], X[3], x0r, x1r;
F> A[0] = a>>16; //разбиваем числа a b надвое
F> A[1] = a — A[0]*65536;//32768;
F> B[0] = b>>16;
F> B[1] = b — B[0]*65536;//32768;
F> X[0] = A[0]*B[0];
F> X[1] = A[1]*B[0] + A[0]*B[1];
F> X[2] = A[1]*B[1];
F> x0r = (4294967295 % c + 1)%c;
F> x1r = 65536 % c;
F> X[0] = (X[0]%c) * x0r;
F> X[1] = (X[1]%c) * x1r;
F> X[2] = X[2]%c;
F> return (X[0]+X[1]+X[2])%c;
F>}
чего-то ты в этой функции перемудрил
так работеат
unsigned long mulrest(unsigned long a,unsigned long b,unsigned long c)
{
return ((__int64 )a * b) % c;
}