矩阵快速幂模板

来源:互联网 发布:逆波兰式算法的栈图 编辑:程序博客网 时间:2024/06/10 18:01
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int x, k, c;long long m;struct Mat {    int v[2][2];    Mat() {memset(v, 0, sizeof(v));}    Mat operator * (const Mat& c) const {        Mat ans;        for (int i = 0; i < 2; i++) {            for (int j = 0; j < 2; j++) {                for (int x = 0; x < 2; x++) {                    ans.v[i][j] = (ans.v[i][j] + v[i][x] * c.v[x][j] % k) % k;                }            }        }        return ans;    }};Mat pow_mod(Mat x, long long k) {    Mat ans;    for (int i = 0; i < 2; i++) ans.v[i][i] = 1;    while (k) {        if (k&1) ans = ans * x;        x = x * x;        k >>= 1;    }    return ans;}int T;int main() {    int cas = 0;    scanf("%d", &T);    while (T--) {        scanf("%d%lld%d%d", &x, &m, &k, &c);        Mat A;        A.v[0][0] = 10 % k; A.v[0][1] = 1 % k;        A.v[1][0] = 0 % k; A.v[1][1] = 1 % k;        A = pow_mod(A, m);        printf("Case #%d:\n", ++cas);        if (x * A.v[0][1] % k == c) printf("Yes\n");        else printf("No\n");    }    return 0;}
0 0
原创粉丝点击