1

1000000007 のモジュラスとともに 2 つの非常に大きな整数を減算する必要があります

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 より大きい場合。
ただし、 437001927 ~ 952742480c[i]%mod未満Sum%mod

4

2 に答える 2

1

私は使うだろう

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

この場合。sumは を法として計算されるmodため、 を超えることはできませんmod

于 2012-05-31T10:55:45.510 に答える
1

ifステートメントを追加するだけです。

if(s[i]<0)
  s[i] += mod
于 2012-05-31T06:58:52.340 に答える