je calcule la somme suivante:Triple Modular Multiplicaiton
(a [x] + m a [x-1] + 2m A [X-2] + 3m * a [x-3] + ....)% MOD (MOD = 1e9 + 7)
Pour cela, j'utilise cette boucle.
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;
Cependant, cela me donne toujours des erreurs de débordement. L'erreur de base, je suppose est dans (b c)% MOD.
Merci.
Qu'est-ce que vous essayez vraiment trouver? '1e9 + 7' ressemble à un problème de concours (Project Euler, peut-être), et ceux-ci ont généralement une manière sournoise de revenir dans la réponse. La réponse facile, cependant, est d'utiliser la version de BigInteger de votre langue. – Teepeemm
Long long int ne peut pas contenir quelque chose de l'ordre de la multiplication de 3 nombres vraiment grands. J'ai donc besoin de créer une fonction qui le calcule. – someone1
mulmod ne fonctionne pas correctement si l'un des arguments est négatif. Ni 'res = a [x]% MOD non plus. Êtes-vous sûr que tous les a [i] sont> = 0 –