传送门
十进制矩阵快速幂。
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long LL; typedef pair pLL; typedef pair pLi; typedef pair pil;; typedef pair pii; typedef unsigned long long uLL; #define lson (rt<<1),L,mid #define rson (rt<<1|1),mid + 1,R #define lowbit(x) x&(-x) #define name2str(name) (#name) #define bug printf("*********\n") #define debug(x) cout<<#x"=["<>= 1; } return b; } int main() { #ifndef ONLINE_JUDGE FIN; #endif memset(x.a, 0, sizeof(x.a)); scanf("%d%d%d%d", &x.a[0][1], &x.a[0][0], &A[1].a[0][0], &A[1].a[1][0]); A[1].a[0][1] = 1; scanf("%s%d", s + 1, &MOD); for(int i = 2; i <= 9; ++i) A[i] = A[i-1] * A[1]; int n = strlen(s + 1); matrix ans = A[s[1]-'0']; for(int i = 2; i <= n; ++i) { ans = qpow(ans, 10); if(s[i] > '0') { ans = ans * A[s[i]-'0']; } } ans = x * ans; printf("%d\n", ans.a[0][1]); return 0; }