题意:求关于$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); }