cf 460 E. Congruence Equation 数学题

题意:

给出一个x 计算<=x的满足下列的条件正整数n的个数



\(p是素数,2 ≤ p ≤ 10^{6} + 3, 1 ≤ a, b < p, 1 ≤ x ≤ 10^{12}\)

思路:

题目中存在两个循环节 \(n % p\) 和 \(a ^ n % p\), 循环节分别为\(p,p-1\)

我们枚举\(i = n\ (mod)\ (p - 1)\)

可以得到两个方程

\[n\ \equiv\ i\ mod\ (p-1)
\]

\[n \equiv \frac{b}{a ^ i}\ mod\ p
\]

令$mm = \frac{b}{a ^ i} $

设 $$n = p * k + mm , n = (p - 1) * q + i $$

于是\(p * k + mm = p * q - q + i\)

在模p意义下可以得到

\(q \equiv (i - mm)\ (mod) p\)

然后就可以根据限制条件计算出有多少个满足条件的q 即答案了


#include<bits/stdc++.h>
#define LL long long
using namespace std; LL qpow(LL x,LL y,LL mod){
x %= mod;
LL ans = 1;
while(y){
if(y & 1) ans = ans * x % mod;
x = x * x % mod;
y >>= 1;
}
return ans;
}
int main(){ LL a,b,p,X;
cin>>a>>b>>p>>X;
LL x,y,m = b,inva = qpow(a, p - 2,p);
LL ans = 0;
for(int i = 0;i < p - 1;i++){
LL mm = (i - m + p) % p;
LL R = (floor)((1.0 * (X - i) / (p -1) - mm)/p) ;
LL L = mm / p;
// for(int j = L;j <= R;j++) cout<<(p * j + mm) * (p - 1) + i<<" ";
m = m * inva % p;
ans += R - L + 1;
}
cout<<ans<<endl;
return 0;
}

最新文章

  1. iOS 之APP上架
  2. 查询oracle数据库,返回的数据是乱码。 PL/SQL正常。
  3. SQL Server 自定义字符串分割函数
  4. USB mass storage协议
  5. js解决通过json传来的timestamp类型时间的显示问题
  6. Apache Kafka系列(四) 多线程Consumer方案
  7. 【转】控制台,终端,tty,shell等概念的区别
  8. C++版 - 剑指offer面试题38:数字在已排序数组中出现的次数
  9. MVC 微信开发获取用户OpenID
  10. git 的详解
  11. R语言RODBC数据库操作
  12. 不同路径II(一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。)
  13. Vue动态新增对象属性
  14. 后台开发 - DPDK引发的图谱
  15. Android Studio 之 打包生成的 apk 安装包装到手机上闪退
  16. iOS提交审核:您的 App 正在使用广告标识符 (IDFA)
  17. 在线js调试工具JSbin、jsFiddle
  18. Enter键登录
  19. redis连接池 jedis-2.9.0.jar+commons-pool2-2.4.2.jar
  20. Java Spring-JdbcTemplate

热门文章

  1. Python3.5+selenium(11)脚本模块化&amp;参数化
  2. 聊聊Bug引发事故该不该追求责任
  3. lesson 23 one man&#39;s meat is another man&#39;s poison
  4. Java开发工程师(Web方向) - 04.Spring框架 - 第4章.数据访问
  5. [JSON].remove( keyPath )
  6. flex布局笔记
  7. 数据库Mysql的学习(一)-启动和进入
  8. Machine Learning笔记整理 ------ (四)线性模型
  9. Notes of the scrum meeting before publishing(12.19)
  10. android 出现Make sure the Cursor is initialized correctly before accessing data from it