2012-05-31 2 views
0

je besoin pour soustraire deux nombres entiers très grands avec module d'1000000007Soustraction de très grands nombres de module

x et y sont des nombres entiers 1 < = x, y < = 1000

long long s[x+1]; 
long long c[x+1]; 

for(int i=1;i<=x;i++) 
    c[i] = power(y,i)%mod; 

s[1]=1; 
for(int i=2;i<=x;i++){ 
    sum=0; 
    for(int j=1;j<i;j++){ 
     sum = (sum + (s[j]*c[i-j]%mod))%mod; 
    } 
    s[i] = (c[i] - sum)%mod; // <----------- s[i] is -ve 
} 

Le problème est lorsque c[i]%mod est inférieure à Sum%mod

Par exemple: Lorsque c [i] est supérieur à Sum.
Mais c[i]%mod est inférieur à Sum%mod
437001927 à 952742480

+1

Vous voulez expliquer ce que votre code est supposé faire? Qu'est-ce que 'x'? Que fait 'calctotal'? Quels sont 's' et' c'? Et quelle est la question? –

Répondre

0

Vous pouvez simplement ajouter une déclaration if.

if(s[i]<0) 
    s[i] += mod 
+0

Merci qui l'a résolu – user1301541

0

J'utiliser

s[i] = (c[i] - sum + mod) % mod; 

dans ce cas. sum est calculé modulo mod, donc il ne peut pas être supérieur à mod.

Questions connexes