用模数减去非常大的数

时间:2012-05-31 06:40:11

标签: math

我需要减去两个非常大的整数以及模数1000000007

x和y是整数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 
}

问题是c[i]%mod小于Sum%mod

例如:当c [i]大于Sum时。
c[i]%mod小于Sum%mod 437001927 - 952742480

2 个答案:

答案 0 :(得分:1)

您只需添加if语句。

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

答案 1 :(得分:1)

我会用

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

在这种情况下。 sum以模mod为模计算,因此不能大于mod