题目链接

\(Description\)

给定a,b,x,p,求[1,x]中满足n*a^n ≡b (mod p) 的n的个数。\(1<=a,b<p\), \(p<=1e6+3\), \(x<=10^{12}\).

\(Solution\)

边界很大,p比较小且为质数,考虑左边这个式子有没有循环节。

由费马小定理 \(a^{p-1} ≡a^0 ≡1(mod\ p)\),\(a^n\)的循环节(一定)为 \(p-1\);\(n%p\) 的循环节(一定)为p

所以 \(n*a^n\) 一定有长为 \(p(p-1)\) 的循环节

设 \(n=k(p-1)+y\),那么 \(n*a^n ≡[k(p-1)+y]*a^{k(p-1)+y} ≡[k(p-1)+y]*a^y (mod\ p)\)

于是原来式子可以化成求n满足 \(k(p-1)+y ≡y-k ≡b*a^{-y} (mod\ p)\)

那么 \(k ≡y-b*a^{-y} (mod\ p)\) (那么满足条件的最小的k就是右式的值)

此时\(1\leq y<p\),于是我们可以枚举y得到一个k,然后就有了一个 \(n=k(p-1)+y\)。

因为循环节长度是p(p-1),所以只需要算在上界内还有多少个p(p-1)即可

//608ms	1828KB
#include <cstdio>
typedef long long LL; LL a,b,p,x; LL FP(LL x,int k)
{
LL t=1;
for(; k; k>>=1,x=x*x%p)
if(k&1) t=t*x%p;
return t;
}
LL inv(LL x){
return FP(x,p-2);
} int main()
{
scanf("%I64d%I64d%I64d%I64d",&a,&b,&p,&x);
LL res=0,P=p*(p-1);
for(int y=1; y<p; ++y)
{
LL k=(y-b*inv(FP(a,y))%p+p)%p;
LL n=(p-1)*k+y;//注意这步不要取模
if(n<=x) res+=(x-n)/P+1;
}
printf("%I64d",res); return 0;
}

Codeforces.919E.Congruence Equation(同余 费马小定理)的更多相关文章

  1. 数学【p2613】 【模板】有理数取余(费马小定理)

    题目描述 给出一个有理数 c=a/b ,求 c mod 19260817的值. 说明 对于所有数据, 0≤a,b≤10^10001 分析: 一看题 这么短 哇简单!况且19260817还是个素数!(美 ...

  2. Codeforces Round #460 (Div. 2).E 费马小定理+中国剩余定理

    E. Congruence Equation time limit per test 3 seconds memory limit per test 256 megabytes input stand ...

  3. Codeforces 919E Congruence Equation ( 数论 && 费马小定理 )

    题意 : 给出数 x (1 ≤ x ≤ 10^12 ),要求求出所有满足 1 ≤ n ≤ x 的 n 有多少个是满足 n*a^n  = b ( mod p ) 分析 : 首先 x 的范围太大了,所以使 ...

  4. [Codeforces 919E]Congruence Equation

    Description 题库链接 求满足 \[n\cdot a^n\equiv b \pmod{p}\] 的 \(n\) 的个数, \(1\leq n\leq x\) , \(a,b,p,x\) 均已 ...

  5. hdu1576-A/B-(同余定理+乘法逆元+费马小定理+快速幂)

    A/B Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  6. codeforces div2_604 E. Beautiful Mirrors(期望+费马小定理)

    题目链接:https://codeforces.com/contest/1265/problem/E 题意:有n面镜子,你现从第一面镜子开始询问,每次问镜子"今天我是否美丽",每天 ...

  7. CodeForces 300C Beautiful Numbers(乘法逆元/费马小定理+组合数公式+高速幂)

    C. Beautiful Numbers time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  8. 逆元 exgcd 费马小定理 中国剩余定理的理解和证明

    一.除法取模逆元 如果我们要通过一个前面取过模的式子递推出其他要取模的式子,而递推式里又存在除法 那么一个很尴尬的事情出现了,假如a[i-1]=100%31=7 a[i]=(a[i-1]/2)%31 ...

  9. poj 3734 Blocks 快速幂+费马小定理+组合数学

    题目链接 题意:有一排砖,可以染红蓝绿黄四种不同的颜色,要求红和绿两种颜色砖的个数都是偶数,问一共有多少种方案,结果对10007取余. 题解:刚看这道题第一感觉是组合数学,正向推了一会还没等推出来队友 ...

随机推荐

  1. python内置模块之collections(六)

    前言 collections是Python内建的一个集合模块,提供了许多有用的集合类. 系列文章 python模块分析之random(一) python模块分析之hashlib加密(二) python ...

  2. win10 + ubuntu双系统详细安装过程

    由于搞深度学习,电脑跟不上,换了一台神舟战神Z8,于是装一个ubuntu双系统,没想到几乎花了一天,还花了80个软妹币找人帮忙,蓝瘦,现在写下来供大家参考: 不得不说,win10 + ubuntu双系 ...

  3. 【转】#ifdef __cplusplus+extern "C"的用法

    时常看到别人的头文件中,有这样的代码: #ifdef __cplusplus extern "C" { #endif //一段代码 #ifdef __cplusplus } #en ...

  4. git命令行提交并且同步到远程代码库

    远程代码库以github为例 1.打开 git bash 2.进入项目目录 cd /e/myGitProjects/test 3.提交到本地git仓库 git add -Agit commit -m ...

  5. 【python】time和datetime的strptime不是线程安全的!

    来源:http://blog.csdn.net/kevin6216/article/details/9021039 在多线程中用strptime需要加锁!!!

  6. VIM vim/vi的文件内、跨文件复制粘贴操作、替换操作

    https://www.cnblogs.com/shengulong/p/6702868.html vi/vim 中可以使用 :s 命令来替换字符串 1.s/vivian/sky/ 替换当前行第一个 ...

  7. GuzzleHttp 请求设置超时时间

    之前调用一个三方的 WEB API,大量的请求超时,导致 PHP 进程被占用完.整个网站一直报 504. 其中一个优化措施就是对三方 API 调用设置超时时间. use GuzzleHttp\Clie ...

  8. springMVC源码分析--FlashMap和FlashMapManager重定向数据保存

    在上一篇博客springMVC源码分析--页面跳转RedirectView(三)中我们看到了在RedirectView跳转时会将跳转之前的请求中的参数保存到fFlashMap中,然后通过FlashMa ...

  9. 通配符(WildCard)的使用

    一.关于WildCard:一个web应用,有成千上万个action声明,可以利用struts2提供的映射机制把多个彼此相似的映射关系简化成一个映射关系,即通配符. 1.新建类 ActionWildCa ...

  10. python 全栈开发,Day23(复习,isinstance和issubclass,反射)

    一.复习 class A: def func1(self):pass def func2(self): pass def func3(self): pass a = A() b = A() print ...