1 条题解
-
1
#include<bits/stdc++.h> #define ll long long using namespace std; ll n,m,k,s,t,g,X0; ll mul(ll a,ll b){// 龟速乘 a*b ll tmp=0; for (;b;b>>=1){ if (b&1) tmp=(tmp+a)%m; a=(a+a)%m; } return tmp; } struct Matrix{ ll a[2][2]; Matrix operator*(const Matrix &b)const{ Matrix tmp; memset(tmp.a,0,sizeof(tmp.a)); for (int i=0;i<2;++i) for (int j=0;j<2;++j) for (int k=0;k<2;++k) tmp.a[i][j]=(tmp.a[i][j]+mul(a[i][k],b.a[k][j]))%m; return tmp; } }ans,a; int main(){ cin>>m>>a.a[0][0]>>a.a[1][0]>>X0>>n>>g; a.a[1][1]=1; ans.a[0][0]=ans.a[1][1]=1; for (;n;n>>=1){ if (n&1) ans=ans*a; a=a*a; } cout<<(mul(X0,ans.a[0][0])+ans.a[1][0])%m%g; }
- 1
信息
- ID
- 377
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 5
- 标签
- 递交数
- 86
- 已通过
- 36
- 上传者