Codeforces 919E Congruence Equation(循环节+数论)
题意
给$n, m, p, x$,求有多少个$n(1\leq n \leq x)$使得$n·a^{n}=b(\textrm{mod}\;p)$成立
思路
考虑一下左边的循环节长度,由于$n%p$的循环节长度为$p$,$a^{n}%p$的循环节长度为$p-1$(根据费马小定理$a^{0}=a^{p-1}=1(\textrm{mod}\;p)$),所以(大胆猜测)左边的循环节长度就是$p*(p-1)$。接下来,设$n=k*(p-1)+i$,有原式:
$n·a^{n}=b(\textrm{mod}\;p)$
$n=b*a^{-n}(\textrm{mod}\;p)$
$k*(p-1)+i=b*a^{-k*(p-1)-i}(\textrm{mod}\;p)$
$-k+i=b*a^{-i}(\textrm{mod}\;p)$
$k=i-b*a^{-i}(\textrm{mod}\;p)$
由于$a^{i}(\textrm{mod}\;p)$的值至多$p-1$个,所以枚举$i$即可算出$k$,即可算出$n=k*(p-1)+i$此为当前$i$下$n$的最小值,然后算一下加了循环节长度之后有多少满足的$n$即可。
Code
#include <bits/stdc++.h>
#define DBG(x) cerr << #x << " = " << x << endl using namespace std;
typedef long long ll; const int N = 1e6 + 5; ll a, b, p, x, ans, pw[N]; ll fpow(ll a, ll b, ll mod) {
ll res = 1; a %= mod;
for(; b; b >>= 1, a = a * a % mod) if(b & 1) res = res * a % mod;
return res;
} int main() {
scanf("%lld%lld%lld%lld", &a, &b, &p, &x);
ll G = p * (p - 1);
for(int i = 1; i <= p - 1; i++) {
pw[i] = i == 1 ? a : pw[i - 1] * a % p;
ll k = ((i - b * fpow(pw[i], p - 2, p) % p) % p + p) % p;
if(x >= k * (p - 1) + i) ans += (x - k * (p - 1) - i) / G + 1;
}
printf("%lld\n", ans);
}
Codeforces 919E Congruence Equation(循环节+数论)的更多相关文章
- 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\), ...
- 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\) 均已 ...
- Codeforces Round #460 (Div. 2) E. Congruence Equation (CRT+数论)
题目链接: http://codeforces.com/problemset/problem/919/E 题意: 让你求满足 \(na^n\equiv b \pmod p\) 的 \(n\) 的个数. ...
- 【Codeforces】Round #460 E - Congruence Equation 中国剩余定理+数论
题意 求满足$na^n\equiv b \pmod p$的$n$的个数 因为$n \mod p $循环节为$p$,$a^n\mod p$循环节为$p-1$,所以$na^n \mod p$循环 ...
- CodeForces 1117C Magic Ship (循环节+二分答案)
<题目链接> 题目大意: 给定起点和终点,某艘船想从起点走到终点,但是海面上会周期性的刮风,船在任何时候都能够向四个方向走,或者选择不走,船的真正行走路线是船的行走和风的走向叠加的,求船从 ...
- Codeforces Round #450 (Div. 2) B. Position in Fraction【数论/循环节/给定分子m 分母n和一个数c,找出c在m/n的循环节第几个位置出现,没出现过输出-1】
B. Position in Fraction time limit per test 1 second memory limit per test 256 megabytes input stand ...
- Codeforces 919 E Congruence Equation
题目描述 Given an integer xx . Your task is to find out how many positive integers nn ( 1<=n<=x1&l ...
- cf 460 E. Congruence Equation 数学题
cf 460 E. Congruence Equation 数学题 题意: 给出一个x 计算<=x的满足下列的条件正整数n的个数 \(p是素数,2 ≤ p ≤ 10^{6} + 3, 1 ≤ a ...
- HDU 5895 Mathematician QSC(矩阵乘法+循环节降幂+除法取模小技巧+快速幂)
传送门:HDU 5895 Mathematician QSC 这是一篇很好的题解,我想讲的他基本都讲了http://blog.csdn.net/queuelovestack/article/detai ...
随机推荐
- Asp-Net-Core-管道VS过滤器
title: Asp.Net Core底层源码剖析(二)过滤器 date: 2022-09-18 10:41:57 categories: 后端 tags: - .NET 正文 Asp.Net Cor ...
- angular2-qrcode 引用报错 error NG8001: 'qr-code' is not a known element:
error NG8001: 'qr-code' is not a known element: 解决方案 假如你的组件模块叫做a-demo.module,你的组件叫做print.component.t ...
- angular---angular路由守卫,有的可以访问有的不可以访问,有的路由地址只有在满足条件时候访问,其它禁止访问,
- Angularjs的重要概念
AngularJS的重要概念 MVC模式 AngularJS最早按照MVC模式设计,在这种设计模式下,AngularJS组件可以分为: M: Model,即模型,是应用程序中用于处理应用程序数据逻辑的 ...
- 应用容器引擎-Docker
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化.容器是完全使用沙箱 ...
- try catch finally,try里有return,finally还执行么?
执行,并且finally的执行早于try里面的return: 结论: 1.不管有木有出现异常,finally块中代码都会执行: 2.当try和catch中有return时,finally仍然会执行: ...
- Object类的toString方法-Object类的equas方法
Object类的toString方法 Object 是类层次结构的根(最顶层)类.每个类都是用 Object 作为超(父)类. 所有对象(包括数组) 都实现这个类的方法 Person类默认继承了Obj ...
- Unity之GPS定位(腾讯sdk)
Unity之GPS定位(腾讯sdk) 目录 Unity之GPS定位(腾讯sdk) 前言 Unity版本及使用插件 正题 编写脚本 Run运行, 跑起来就行,具体要什么,去相关类找就好了. 没有腾讯地图 ...
- 【新晋开源项目】内网穿透神器[中微子代理] 加入 Dromara 开源社区
1.关于作者 dromara开源组织成员,dromara/neutrino-proxy项目作者 名称:傲世孤尘.雨韵诗泽 名言: 扎根土壤,心向太阳.积蓄能量,绽放微光. 拘浊酒邀明月,借赤日暖苍穹. ...
- git拉项目出现的小问题
问题描述 在IDEA中拉代码事报错. 点击查看报错信息 error: unable to read askpass response from 'C:\Users\霍亚龙\AppData\Local\ ...