博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces 919E - Congruence Equation
阅读量:6157 次
发布时间:2019-06-21

本文共 1019 字,大约阅读时间需要 3 分钟。

思路:

费马小定理。

n*a^n = b (mod p)

根据费马小定理 a^(p-1) = 1 (mod p)

我们把n化为 n=i+y(p-1)

于是[i+y(p-1)]*a^ [i+y(p-1)] = b (mod p)

再根据费马小定理a^ [i+y(p-1)]=a^i  (mod p)

于是[i+y(p-1)]*a^i = b (mod p)

于是y = (b/(a^i)-i)/(p-1) (mod p)

于是y = (b/(a^i)-i)/(p-1) +k*p(除法用逆元做)

我们发现如果i>p,那么mod p 后还是在0 到 p-1的范围内,所以 0<=i<p,又因为i=0不满足题意,于是0<i<p

于是题目就转换成了遍历i,对于每个i,找有多少个y满足题意

因为n<=x,所以i+y*(p-1)<=x,所以y<=(x-i)/(p-1),所以对于每个i的y的上界可以确定,找y的个数就很简单了

代码:

#include
using namespace std;#define ll long long#define pb push_back#define mem(a,b) memset(a,b,sizeof(a))const int N=1e6+5;int inv[N];void init(int p){ inv[1]=1; for(int i=2;i
>=1; a=(a*a)%p; } return ans;}int main(){ ios::sync_with_stdio(false); cin.tie(0); ll a,b,p,x; cin>>a>>b>>p>>x; init(p); ll ans=0; for(int i=1;i
x)continue; ll add=(yy-y)/p+1; ans+=add; //cout<
<<' '<
<<' '<
<<' '<
<

 

转载于:https://www.cnblogs.com/widsom/p/8399755.html

你可能感兴趣的文章
下一步工作分配
查看>>
Response. AppendHeader使用大全及文件下载.net函数使用注意点(转载)
查看>>
Wait Functions
查看>>
jQuery最佳实践
查看>>
centos64i386下apache 403没有权限访问。
查看>>
jquery用法大全
查看>>
PC-BSD 9.2 发布,基于 FreeBSD 9.2
查看>>
css斜线
查看>>
Windows phone 8 学习笔记(3) 通信
查看>>
Revit API找到风管穿过的墙(当前文档和链接文档)
查看>>
Scroll Depth – 衡量页面滚动的 Google 分析插件
查看>>
Windows 8.1 应用再出发 - 视图状态的更新
查看>>
自己制作交叉编译工具链
查看>>
Qt Style Sheet实践(四):行文本编辑框QLineEdit及自动补全
查看>>
[物理学与PDEs]第3章习题1 只有一个非零分量的磁场
查看>>
深入浅出NodeJS——数据通信,NET模块运行机制
查看>>
onInterceptTouchEvent和onTouchEvent调用时序
查看>>
android防止内存溢出浅析
查看>>
4.3.3版本之引擎bug
查看>>
SQL Server表分区详解
查看>>