Codeforces.919E.Congruence Equation(同余 费马小定理)
\(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(同余 费马小定理)的更多相关文章
- 数学【p2613】 【模板】有理数取余(费马小定理)
题目描述 给出一个有理数 c=a/b ,求 c mod 19260817的值. 说明 对于所有数据, 0≤a,b≤10^10001 分析: 一看题 这么短 哇简单!况且19260817还是个素数!(美 ...
- Codeforces Round #460 (Div. 2).E 费马小定理+中国剩余定理
E. Congruence Equation time limit per test 3 seconds memory limit per test 256 megabytes input stand ...
- Codeforces 919E Congruence Equation ( 数论 && 费马小定理 )
题意 : 给出数 x (1 ≤ x ≤ 10^12 ),要求求出所有满足 1 ≤ n ≤ x 的 n 有多少个是满足 n*a^n = b ( mod p ) 分析 : 首先 x 的范围太大了,所以使 ...
- [Codeforces 919E]Congruence Equation
Description 题库链接 求满足 \[n\cdot a^n\equiv b \pmod{p}\] 的 \(n\) 的个数, \(1\leq n\leq x\) , \(a,b,p,x\) 均已 ...
- hdu1576-A/B-(同余定理+乘法逆元+费马小定理+快速幂)
A/B Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- codeforces div2_604 E. Beautiful Mirrors(期望+费马小定理)
题目链接:https://codeforces.com/contest/1265/problem/E 题意:有n面镜子,你现从第一面镜子开始询问,每次问镜子"今天我是否美丽",每天 ...
- CodeForces 300C Beautiful Numbers(乘法逆元/费马小定理+组合数公式+高速幂)
C. Beautiful Numbers time limit per test 2 seconds memory limit per test 256 megabytes input standar ...
- 逆元 exgcd 费马小定理 中国剩余定理的理解和证明
一.除法取模逆元 如果我们要通过一个前面取过模的式子递推出其他要取模的式子,而递推式里又存在除法 那么一个很尴尬的事情出现了,假如a[i-1]=100%31=7 a[i]=(a[i-1]/2)%31 ...
- poj 3734 Blocks 快速幂+费马小定理+组合数学
题目链接 题意:有一排砖,可以染红蓝绿黄四种不同的颜色,要求红和绿两种颜色砖的个数都是偶数,问一共有多少种方案,结果对10007取余. 题解:刚看这道题第一感觉是组合数学,正向推了一会还没等推出来队友 ...
随机推荐
- linux 定期清除日志
clearLog.sh #!/bin/sh find /usr/local/apache/logs -mtime + 30 -name "*.log" -exec rm {} \; ...
- Linux MMC framework2:基本组件之host
声明:本文很多内容和思路参考了http://www.wowotech.net/comm/mmc_host_driver.html,对原作者表示感谢! 1.前言 本文是Linux MMC framewo ...
- Linux串口—struct termios结构体【转】
转自:https://blog.csdn.net/yemingzhu163/article/details/5897156 一.数据成员 termios 函数族提供了一个常规的终端接口,用于控制非同步 ...
- ruia笔记
ruia笔记 loop = loop or asyncio.new_event_loop() get_event_loop()方法仅在同样的线程中生效,如果在一个新线程中,应该用new_event_l ...
- Python3学习笔记19-继承和多态
在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承, 新的class称为子类(Subclass),而被继承的class称为基类.父类或超类(Base class.Sup ...
- mysql5.5.48的my.cnf配置
MYSQL配置 [client] port = 3306 socket = /tmp/mysql.sock [mysqld] port = 3306 default-storage-engine=My ...
- 转载:小结(1.7)《深入理解Nginx》(陶辉)
原文:https://book.2cto.com/201304/19622.html 本章介绍了Nginx的特点以及在什么场景下需要使用Nginx,同时介绍了如何获取Nginx以及如何配置.编译.安装 ...
- python 全栈开发,Day138(scrapy框架的下载中间件,settings配置)
昨日内容拾遗 打开昨天写的DianShang项目,查看items.py class AmazonItem(scrapy.Item): name = scrapy.Field() # 商品名 price ...
- Ext.js项目(一)
这个项目整体采用代码生成器生成,具体看下图:
- hdu 5256 最少修改多少个数 能使原数列严格递增 (LIS)
Problem Description我们有一个数列A1,A2...An,你现在要求修改数量最少的元素,使得这个数列严格递增.其中无论是修改前还是修改后,每个元素都必须是整数. 请输出最少需要修改多少 ...