本文共 989 字,大约阅读时间需要 3 分钟。
给出 T,n, A, K,a, b, m, P.
T 组样例.
求
由于
所以
如果用快速幂求和的话会 TLE.
因为
所以只需要求 sum1[] 和 sum2[].
sum1[i]:
sum2[i]:
详见代码.
#include #include #include #include #include #include #include #include #include #include #include #include #include #define eps 1e-6#define PI acos(-1.0)#define ll long long intusing namespace std;const int M = (int)1e5;ll n, A, K, a, b, m, p;ll sum1[M + 5];ll sum2[M + 5];void init(){ sum1[0] = sum2[0] = 1; for(int i = 1; i <= M; ++i) sum1[i] = sum1[i - 1] * A % p; sum2[1] = sum1[M]; for(int i = 1; i <= M / 10; ++i) sum2[i] = sum2[i - 1] * sum2[1] % p;}ll f(){ ll fx = K; ll sum = 0; for(ll i = 1; i <= n; ++i) { sum = (sum1[fx % M] * sum2[fx / M] % p + sum) % p; fx = (a * fx + b) % m; } return sum % p;}int main(){ int T; scanf("%d", &T); for(int ca = 1; ca <= T; ++ca) { cin >> n >> A >> K >> a >> b >> m >> p; init(); ll ans = f(); printf("Case #%d: %lld\n", ca, ans); } return 0;}
转载地址:http://tyht.baihongyu.com/