Я вычисления следующую сумму:Тройной Модульный Multiplicaiton
(а [х] + т а [х-1] + 2m а [х-2] + 3m * а [х-3] + ....)% MOD (MOD = 1e9 + 7)
Для этого я использую этот цикл.
long long mulmod(long long a,long long b,long long c)
{
if (a == 0 || b == 0)
return 0;
if (a == 1)
return b;
if (b == 1)
return a;
long long a2 = mulmod(a, b/2, c);
if ((b & 1) == 0)
{
return (a2 + a2) % c;
}
else
{
return ((a % c) + (a2 + a2)) % c;
}
}
res=a[x]%MOD;
for(i=x-1;i>=1;i--)
res=(res%MOD+mulmod(mulmod(x-i,m,MOD),a[i],MOD))%MOD;
Однако, это все еще дает мне ошибки переполнения. Основная ошибка, я думаю, находится в (a b c)% MOD.
спасибо.
Что вы на самом деле пытаетесь найти? '1e9 + 7' выглядит как проблема конкурса (Project Euler, возможно), и у них обычно есть подлый способ вернуться в ответ. Тем не менее, легкий ответ заключается в использовании версии BigInteger на вашем языке. – Teepeemm
Длинный длинный int не может вписаться в что-то вроде порядка умножения 3 действительно больших чисел. Поэтому мне нужно создать функцию, которая его вычисляет. – someone1
mulmod не работает правильно, если какой-либо из аргументов отрицательный. Также 'res = a [x]% MOD'. Вы уверены, что все a [i] равны> 0 –