作为特定问题的答案,我必须打印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的模数。
对于n
的较大值,s
变为负数。发生这种情况是因为模数值发生了变化。因此即使c>d
,c%p<d%p
也有可能。对于n=1000000000
和k=25
,s=-727999801
。我无法想出合适的解决方法。
答案 0 :(得分:0)
-2 % 7 = 5
,因为-2 = 7 * (-1) + 5
,而c ++模运算会返回-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
- 正确答案。