時間限制: 7 Sec 內存限制: 1024 MBc++
第一次據說快速乘法,記錄一下,用的大佬的板子spa
#include<bits/stdc++.h> #define LL long long using namespace std; LL multi(LL x,LL y,LL mod){ LL tmp = (x * y - (LL)((long double) x / mod * y + 1.0e-8) * mod); return tmp < 0 ? tmp+mod : tmp; } /// an = m0an−1 + m1an−2 + c int main() { int T; scanf("%d",&T); while(T--){ LL a0, a1, m0, m1, c, M, k; scanf("%lld%lld%lld%lld%lld%lld%lld", &a0, &a1, &m0, &m1, &c, &M, &k); LL ans = 0; ans += multi(a0, a1, M); for(int i = 2; i <= k; i++) { LL p1 = multi(m0, a1, M); LL p0 = multi(m1, a0, M); LL t = p1 + p0 + c; ans = multi(t, ans, M); a0 = a1; a1 = t; } printf("%lld\n", ans); } return 0; }