我在做一道站外题(给定 n,m,求 i=1∑naimmod10007)的时候写出了下面的代码:
#include <bits/stdc++.h>
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define ll long long
#define ul unsigned long long
using namespace std;
const ll M = 10007ll;
ll ksm(ll a, ll p, ll mod) {
if (p == 0ll) return 1ll;
else if (p == 1ll) return a;
else if (p % 2ll == 0ll) {
return (ksm(a, p / 2ll, mod) * ksm(a, p / 2ll, mod)) % mod;
} else {
return (a * ksm(a, p / 2ll, mod) * ksm(a, p / 2ll, mod)) % mod;
}
}
int main() {
int T;
int n, m;
scanf ("%d", &T);
while (T--) {
ll ans = 0ll;
scanf ("%d%d", &n, &m);
int k = n % 10007, q = n / 10007;
for (int i = 1; i <= k; ++i) ans += ksm(1ll * i, 1ll * m, 10007ll) * (q + 1);
puts("ccf");
for (int i = k + 1; i < 10007; ++i) {
ans += ksm(1ll * i, 1ll * m, 10007ll) * q;
cout << ans << ' ' << i << endl;
}
ans %= 10007ll;
printf ("%lld\n", ans);
}
}
注释掉 31∼34 行的时候会输出结果,但是不注释就会卡住,而且 30 行的 puts("ccf") 也不会正常输出。