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