[CF919E]Congruence Equation

Posted jefflyy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[CF919E]Congruence Equation相关的知识,希望对你有一定的参考价值。

题意:求关于$n$的方程$n\cdot a^n\equiv b\left(mod\ p\right)$在$[1,x]$中整数解的数量

果然是Chinese round,interesting round(幸好没打

首先注意到那个指数很令人痛苦,所以用费马小定理把指数弄掉

令$n=\left(p-1\right)i+j\left(i\geq0,0\leq j\lt p-1\right)$

$\left[\left(p-1\right)i+j\right]a^{\left(p-1\right)i+j}\equiv b$

$\left(p-1\right)i+j\equiv\dfrac{b}{a^j}$

$i\equiv j-\dfrac{b}{a^j}$

所以对于每个给定的$j$,$i$的取值是$j-\dfrac{b}{a^j}+tp$的形式

所以我们可以枚举$0\leq j\lt p-1$,直接按$i\geq0,1\leq n\leq x$统计一下就好

注意减去$i=0$且$j=0$,也就是$n=0$的情况

#include<stdio.h>
#define ll long long
ll a,b,p,x,y,j,r,l,res;
int main(){
	scanf("%I64d%I64d%I64d%I64d",&a,&b,&p,&x);
	r=1;
	for(j=0;j<p-2;j++)r=r*a%p;
	y=b;
	for(j=0;j<p-1;j++){
		l=j-y;
		if(l<0)l+=p;
		if(x>=j&&l<=(x-j)/(p-1)){
			res+=((x-j)/(p-1)-l)/p+1;
			if(l==0&&j==0)res--;
		}
		y=y*r%p;
	}
	printf("%I64d\n",res);
}

以上是关于[CF919E]Congruence Equation的主要内容,如果未能解决你的问题,请参考以下文章

cf 460 E. Congruence Equation 数学题

Codeforces 919E 数论,思维

Codeforces 919 E Congruence Equation

Correlation Congruence for Knowledge Distillation

Correlation Congruence for Knowledge Distillation

CodeforcesRound #460 E - Congruence Equation 中国剩余定理+数论