CodePlus2017 12月月赛 div2可做题2

11月的月赛错过了,来打12月月赛,由于很(zi)想(ji)拿(tai)衣(ruo)服(la),所以去打div2。

T1是一个sb模拟,但是机房全卡死在这道语文题上了,基本上弄了一个半小时,T2可以秒杀,T4像一个数据结构神题,写了4个set+1个树状数组水了水。

然后就剩下我最怕的数学题。llj说这道题式子贼好推,你做做吧。我瑟瑟发抖。

下来看这道题,确实是道比较简单的数学题。

我们假设$F_i$为斐波那契数列的第$i$项,

那么这道题第$k$项就应该是$A_k = A_1 imes F_{k-2} + A_2 imes F_{k-1}$

那么我们需要求满足$A_1 imes F_{k-2} + A_2 imes F_{k-1} equiv m pmod{p}$的$A_2$的个数。

那么直接用exgcd求最小整数解就可以啦。

(update 1229)贴个代码:

//Serene
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
using namespace std;
#define ll long long
ll T,p,n,m;
ll f[3],g[3][3],f2[3],g2[3][3];

ll aa;char cc;
ll read() {
	aa=0;cc=getchar();
	while(cc<'0'||cc>'9') cc=getchar();
	while(cc>='0'&&cc<='9') aa=aa*10+cc-'0',cc=getchar();
	return aa;
}

ll gcd(ll x,ll y) {
	return y==0? x:gcd(y,x%y);
}

void cf1() {
	memcpy(f2,f,sizeof(f));
	f[1]=f2[1]*g[1][1]%p+f2[2]*g[2][1]%p;
	f[2]=f2[1]*g[1][2]%p+f2[2]*g[2][2]%p;
	if(f[1]>=p) f[1]-=p;
	if(f[2]>=p) f[2]-=p;
}

void cf2() {
	memcpy(g2,g,sizeof(g));
	memset(g,0,sizeof(g));
	for(int i=1;i<=2;++i) for(int j=1;j<=2;++j) for(int k=1;k<=2;++k) {
		g[i][j]+=g2[i][k]*g2[k][j]%p;
		if(g[i][j]>=p) g[i][j]-=p;
	}
}

void qpz(ll k) {
	f[1]=f[2]=1; g[1][1]=0;
	g[1][2]=g[2][1]=g[2][2]=1;
	while(k) {
		if(k&1) cf1();
		cf2(); k>>=1;
	}
}

ll qp(ll x,ll k) {
	ll rs=1;
	while(k) {
		if(k&1) rs=rs*x%p;
		k>>=1; x=x*x%p;
	}
	return rs;
}

void exgcd(ll a,ll b,ll &x,ll &y) {
	if(!b) {
		x=1; y=0;
		return;
	}
	exgcd(b,a%b,y,x);
	y-=(a/b)*x;
}

ll get_ans(ll r,ll x,ll b) {
	if(r<0) return 0;
	ll rs=r/b;
	if(r%b>=x) rs++;
	return rs;
}

int main() {
	T=read();ll x,y,a,b,c,o,l,r,w;
	while(T--) {
		w=read(); l=read(); r=read();
		n=read(); p=read(); m=read();
		qpz(n-3);
		a=f[2]; b=p; c=(m%p-w%p*f[1]%p+p)%p;//
		if(c%(o=gcd(a,b))) {
			printf("0
"); continue;
		}
		a/=o; b/=o; c/=o;
		exgcd(a,b,x,y); x*=c;
		x%=b; if(x<0) x+=b;
		printf("%lld
",get_ans(r,x,b)-get_ans(l-1,x,b));
	}
	return 0;
}
/*
1
692858490132927148 33 93 11 90 52
*/
原文地址:https://www.cnblogs.com/Serene-shixinyi/p/8111242.html