医美类网站如何做推广,百度平台商家app下载,购买一个小程序多少钱,微信转账做网站收款正题
题目链接:https://www.luogu.org/problemnew/show/P3216 题目大意
求1∼n1\sim n1∼n连起来%m\% m%m之后的值。 解题思路
我们可以考虑矩乘#xff0c;但是当xxx位数时每次乘上10x10^x10x#xff0c;所以我们对于不同位分开处理就好了。 codecodecode
#includec…正题
题目链接:https://www.luogu.org/problemnew/show/P3216 题目大意
求1∼n1\sim n1∼n连起来%m\% m%m之后的值。 解题思路
我们可以考虑矩乘但是当xxx位数时每次乘上10x10^x10x所以我们对于不同位分开处理就好了。 codecodecode
#includecstdio
#includealgorithm
#includecstring
#define ll long long
using namespace std;
const int Size4;
struct matrix{ll a[Size][Size];
}f,a;
ll n,m,k,pn,z;
matrix operator *(matrix a, matrix b) {matrix c;memset(c.a,0,sizeof(c.a));for (ll i0;iSize;i)for (ll j0;jSize;j)for (ll k0;kSize;k)(c.a[i][j]a.a[i][k]*b.a[k][j]%m)%m;return c;
}
ll pows(ll x,ll b)
{ll ans1;while(b){if(b1) ansans*x%m;xx*x%m;b1;}return ans;
}
void make_matrix(ll k)
{memset(a.a,0,sizeof(a.a));a.a[0][0]z*10%m;a.a[1][0]1;a.a[2][1]1;a.a[1][1]1;a.a[2][2]1;f.a[0][1]z%m;f.a[0][2]1;
}
void power(ll b)
{/*while(b--)ff*a;*/while(b){if(b1) ff*a;aa*a;b1;}
}
int main()
{scanf(%lld%lld,n,m);pnn;k0;z1;while(n){k;make_matrix(k);if(n/10)power(z*10-z);elsepower(pn-z1);n/10;z*10;}printf(%lld,f.a[0][0]);
}