项差模
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=1
、p=1000000007
和s
是我的最终答案。
我必须对 p 取模 s。
对于较大的 n
值,s
变为负值。发生这种情况是因为模值发生了变化。所以即使c>d
,也有可能c%p<d%p
。对于 n=1000000000
和 k=25
,s=-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
- 正确答案。
作为特定问题的答案,我必须打印 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=1
、p=1000000007
和s
是我的最终答案。
我必须对 p 取模 s。
对于较大的 n
值,s
变为负值。发生这种情况是因为模值发生了变化。所以即使c>d
,也有可能c%p<d%p
。对于 n=1000000000
和 k=25
,s=-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
- 正确答案。