WA求助
查看原帖
WA求助
656427
iamsh楼主2024/6/27 20:07

矩阵快速幂

#include <bits/stdc++.h>
using namespace std;
long long n,k,mod;
struct Matrix {
	long long a[3][3];
	Matrix operator * (const Matrix &x) {
		Matrix ans;
		for(int i = 1;i <= 2;i ++) {
			for(int j = 1;j <= 2;j ++) {
				for(int k = 1;k <= 2;k ++) {
					ans.a[i][j] = (ans.a[i][j] + a[i][k] * x.a[k][j]) % mod;
				}
			}
		}
    	return ans;
	}
}ans,base;
void ksm(long long x) {
	while(x) {
		if(x & 1) {
			ans = ans * base;
		}
		base = base * base;
		x >>= 1;
	}
}
int main() {
	scanf("%lld%lld%lld",&mod,&k,&n);
	if(n == 0) {
		printf("2");
		return 0;
	}
	if(n == 1) {
  		printf("%lld",k % mod);
  		return 0;
	}
	base.a[1][1] = k;
	base.a[1][2] = 1;
	base.a[2][1] = -1;
	ans.a[1][1] = (k * k - 2) % mod;
	ans.a[1][2] = k % mod;
	ksm(n - 2);
  	printf("%lld",(ans.a[1][1] + mod) % mod);
  	return 0;
}

,第三个样例死活过不去,感觉和题解一模一样,不知道哪里错了。

2024/6/27 20:07
加载中...