项差模

Modulo of difference of terms

作为特定问题的答案,我必须打印 n*k^n - (n-1)*k

for(i=0;i<n;i++){
    c=(c%p*k%p)%p;
    c=(c%p*n%p)%p;
    d=((n-1)%p*k%p)%p;
    s=(c%p-d%p)%p;
    cout<<s<<endl;
}

最初c=1p=1000000007s是我的最终答案。 我必须对 p 取模 s。

对于较大的 n 值,s 变为负值。发生这种情况是因为模值发生了变化。所以即使c>d,也有可能c%p<d%p。对于 n=1000000000k=25s=-727999801。我想不出合适的解决方法。

-2 % 7 = 5,因为 -2 = 7 * (-1) + 5,而 c++ 模运算会 return -2,所以要获得正数,只需添加 p

if (s < 0) s += p;

我建议您按以下方式重写代码:

for (int i = 0; i < n; i++) {
    c = (c * (k % p)) % p;
}
c = (c * (n % p)) % p;
int d = ((n - 1) % p * (k % p)) % p;
int s = (c - d) % p;
if (s < 0) s += p;
cout << s << endl;

要检查一些小的输入,您可以使用以下行:

cout << (n * (int)pow(k, n) - (n-1)*k) % p << endl;

尝试 运行 使用此输入:

const int n = 5;
const int p = 7;
const int k = 10;
int c = 1;

你会发现没有 if (s < 0) s += p; 就是 -1。此行将其修复为 6 - 正确答案。