CF 919E Congruence Equation 费马小+同余(循环节)
2018-02-03 22:25
246 查看
题意:给出a,b,p,x. p为素数.问有多少个1<=n<=x 满足n*a^n≡b(mod p)
1<=a,b<=p 1<=p<=1e6+3. 1<=x<=1e12.
因为p为素数 由费马小:a^(p-1)≡1 (mod p) a^p=a *a^(p-1) ≡ a (mod p) 得a^n %p 最小循环节为p-1.
n%p的最小循环节显然为p. 那么设n=i*(p-1)+j (0<=j<p)
n*a^n≡ (i*(p-1)+j)%p * a^(i*(p-1)+j)%(p-1) ≡(j-i)*a^j ≡b (mod p)
因为1<=j<p 现在枚举j 得到 (j-i)≡b*a^-j(modp) 设右边的结果为y,则满足条件的i最小值为j-y.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a,b,p,x;
ll qpow(ll x,ll n,ll mod)
{
ll s=1;
while(n)
{
if(n&1)
s=(s*x)%mod;
x=(x*x)%mod;
n>>=1;
}
return s;
}
ll inv(ll x)
{
return qpow(x,p-2,p);
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin>>a>>b>>p>>x;
ll res=0;
for(ll j=1;j<p;j++)
{
ll y=(b*inv(qpow(a,j,p)))%p;
ll first=((j-y+p)%p)*(p-1)+j;
if(first>x) continue;
res+=(x-first)/((p-1)*p)+1;
}
cout<<res<<endl;
return 0;
}
1<=a,b<=p 1<=p<=1e6+3. 1<=x<=1e12.
因为p为素数 由费马小:a^(p-1)≡1 (mod p) a^p=a *a^(p-1) ≡ a (mod p) 得a^n %p 最小循环节为p-1.
n%p的最小循环节显然为p. 那么设n=i*(p-1)+j (0<=j<p)
n*a^n≡ (i*(p-1)+j)%p * a^(i*(p-1)+j)%(p-1) ≡(j-i)*a^j ≡b (mod p)
因为1<=j<p 现在枚举j 得到 (j-i)≡b*a^-j(modp) 设右边的结果为y,则满足条件的i最小值为j-y.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a,b,p,x;
ll qpow(ll x,ll n,ll mod)
{
ll s=1;
while(n)
{
if(n&1)
s=(s*x)%mod;
x=(x*x)%mod;
n>>=1;
}
return s;
}
ll inv(ll x)
{
return qpow(x,p-2,p);
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin>>a>>b>>p>>x;
ll res=0;
for(ll j=1;j<p;j++)
{
ll y=(b*inv(qpow(a,j,p)))%p;
ll first=((j-y+p)%p)*(p-1)+j;
if(first>x) continue;
res+=(x-first)/((p-1)*p)+1;
}
cout<<res<<endl;
return 0;
}
相关文章推荐
- CF 919E Congruence Equation 费马小+同余(循环节)
- 费马小定理,欧拉定理,指数循环节
- CF 182D Common Divisors(KMP最短循环节,循环周期)
- CF 456B(Fedya and Maths-找循环节)
- CF 603B 数学,同余
- CF 376C Divisible By Seven 同余+暴力
- 【证明】关于项链问题中旋转操作的置换群的循环节个数、长度的证明【Pólya】【同余】
- 【CF 应用开发大赛】DLOG4J博客系统
- cf 697b 科学记数法逆推
- 【CF啥时候改成文件输出了0 0】CodeForce 253A—boys and girls
- CF 702C Cellular Network
- CF 145E
- poj 1426(同余搜索)
- KMP算法 —— next 数组的应用 --- 前缀中最小循环节,最大重复次数
- CF 148A Insomnia cure
- hdu 2802——找循环节的方法拓展
- iOS - CFSocket 的使用
- Project Euler 26 Reciprocal cycles(计算有理小数循环节长度)
- CF 616F Expensive Strings 用到fail链性质的SAM练手题
- NSString NSCFString isMemberOfClass 遇到的相关的问题