919E - Congruence Equation(費馬小定理)
阿新 • • 發佈:2018-11-07
919E - Congruence Equation
題目大意:
給定
,
,
,
求
且滿足
的
有多少個?
解:
如何學習數學?
要跪了。
費馬小定理的一道好題。推一波式子就可以for迴圈完美解決:
發現
作為次數特別大,這個不好算。其實
作為係數還可以處理,這裡我們為了使用費馬小定理把
拆分成
把
的倍數部分去掉
我們驚奇地發現我們把
分開了,而且
是小於
的(一臉可做的樣子)。
於是我們想到列舉
然後可以求出
%
的值,算出在滿足條件的
有多少。
需要注意的是
應該從0列舉到p-1
同時如果有
=0&&
=1應該去掉。
code:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
long long a,b,p,x;
long long n;
long long qui(long long e,long long c){
long long ret=1;
while(c!=0){
if((c&1)==1) ret=ret*e%p;
e=e*e%p;
c=c>>1;
}
return ret;
}
int main()
{
cin>>a>>b>>p>>x;
for(long long j=0;j<min(p-1,x+1);j++){
long long w=qui(qui(a,j),p-2);
w=(j-b*w)%p;w=(w+p)%p;
long long u=(x-j)/(p-1);
if(u>=w) n+=(u-w)/p+1;
if(j==0&&w==0) n--;
}
cout<<n;
}