蒟蒻求调。。。
查看原帖
蒟蒻求调。。。
748239
OIbishop楼主2023/3/10 18:40
#include <bits/stdc++.h>
using namespace std;

long long n , m , x = 10;

struct f
{
	long long a[11][11];
	inline void print ()
	{
		for (int i = 1; i <= 3; i++ , cout << "\n")
			for (int j = 1; j <= 3; j++)
				cout << a[i][j] << " ";
	}
};

f operator * (const f &l , const f &b)
{
	f c;
	for (long long i = 1; i <= 3; i++)
		for (long long j = 1; j <= 3; j++)
			c.a[i][j] = 0;
	for (long long i = 1; i <= 3; i++)
		for (long long j = 1; j <= 3; j++)
			for (long long k = 1; k <= 3; k++)
				c.a[i][j] = (c.a[i][j] + l.a[i][k] % m * b.a[k][j] % m) % m;
	return c;
}

f ksm (f a , long long k)
{
	f ans;
	for (long long i = 1; i <= 3; i++)
		for (long long j = 1; j <= 3; j++)
			ans.a[i][j] = 1;
	while (k)
	{
		if (k & 1) ans = ans * a;
		k >>= 1;
		a = a * a;
	}
	return ans;
}
f a , z;
inline void PNN (long long l)
{
	a.a[1][1] = x % m , a.a[1][2] = a.a[1][3] = a.a[2][2] = a.a[2][3] = a.a[3][3] = 1;
	a = ksm (a , l);
	z = z * a;
}
long long ans = 0;

signed main ()
{
	cin >> n >> m;
	for (int i = 1; i <= 3; i++)
		for (int j = 1; j <= 3; j++)
			z.a[i][j] = 1 , a.a[i][j] = 0;
	while (x <= n)
	{
		PNN (x - x / 10);
		x *= 10;
	}
	PNN (n - x + 1);
	ans = z.a[1][3];
	cout << ans << endl;
	return 0;
}
2023/3/10 18:40
加载中...