2875: [Noi2012]随机数生成器 (矩阵乘法,快速幂,快速乘)

#include<cstdio>
#define ll long long
struct M{ll x,y;}t;
ll m,x0,n,g;
inline ll mult(ll t,ll k){
	ll res=0;
	for(;k;k>>=1,t=(t<<1)%m)
		if(k&1)res=(res+t)%m;
	return res;
}
M operator * (const M &a,const M &b){
	return (M){mult(a.x,b.x),(mult(a.x,b.y)+a.y)%m};
}
M operator ^ (M t,ll k){
	M res=t;
	for(--k;k;k>>=1,t=t*t)
		if(k&1)res=res*t;
	return res;
}
int main(){
	scanf("%lld%lld%lld%lld%lld%lld",&m,&t.x,&t.y,&x0,&n,&g);
	t=t^n;printf("%lld",(mult(x0,t.x)+t.y)%m%g);
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值