推式子

我们设\(n=kp+w\),则:

\[(kp+w)a^{kp+w}\equiv b(mod\ p)
\]

将系数中的\(kp+w\)向\(p\)取模,指数中的\(kp+w\)根据欧拉定理向\(p-1\)取模,得到:

\[wa^{k+w}\equiv b(mod\ p)
\]

两边同除以\(wa^w\),得到:

\[a^k\equiv\frac b{wa^w}(mod\ p)
\]

求答案

考虑到\(p\)很小,因此我们直接枚举\(w\),则右边式子的值可以通过预处理逆元和幂的逆元,\(O(1)\)计算出来。

那么我们就是要求出在\(0\sim\lfloor\frac {x-w}p\rfloor\)范围内存在多少个\(k\)满足\(a^k(mod\ p)\)等于我们给定的值。

由于从小往大枚举\(w\),\(k\)的上界递减,因此我们可以采用类似莫队但只有一个端点的方式去维护一个桶,总时间复杂度是\(O(p)\)的。

代码

#pragma GCC optimize(2)
#include<bits/stdc++.h>
#define Tp template<typename Ty>
#define Ts template<typename Ty,typename... Ar>
#define Reg register
#define RI int
#define Con const
#define CI Con int&
#define I inline
#define W while
#define LL long long
#define MxX 1000003
#define min(x,y) ((x)<(y)?(x):(y))
using namespace std;
LL n;int a,b,X;
class MathSolver
{
private:
int pw[MxX+5],Ipw[MxX+5],Inv[MxX+5],p[MxX+5];
public:
I void Solve()
{
RI i,t=-1,lim;LL k,ans=0;
for(Inv[1]=1,i=2;i^X;++i) Inv[i]=1LL*(X-1)*(X/i)%X*Inv[X%i]%X;//预处理逆元
for(pw[0]=Ipw[0]=1,i=1;i^X;++i) pw[i]=1LL*pw[i-1]*a%X,Ipw[i]=1LL*Ipw[i-1]*Inv[a]%X;//预处理幂及其逆元
for(i=0,t=n/X;i<=t;++i) ++p[pw[i%(X-1)]];//预处理桶
for(i=1,lim=min(n,X-1);i<=lim;++i)//枚举余数
{
k=(n-i)/X;W(t>k) --p[pw[(t--)%(X-1)]];//移动上界
ans+=p[1LL*b*Ipw[i%(X-1)]%X*Inv[i]%X];//统计答案
}printf("%lld",ans);//输出答案
}
}S;
int main()
{
freopen("figure.in","r",stdin),freopen("figure.out","w",stdout);
return scanf("%d%d%d%lld",&a,&b,&X,&n),a%=X,b%=X,S.Solve(),0;
}

【2019.7.26 NOIP模拟赛 T1】数字查找(figure)(数学)的更多相关文章

  1. 2019.7.26 NOIP 模拟赛

    这次模拟赛真的,,卡常赛. The solution of T1: std是打表,,考场上sb想自己改进匈牙利然后wei了(好像匈牙利是错的. 大力剪枝搜索.代码不放了. 这是什么神仙D1T1,爆蛋T ...

  2. 【2019.7.20 NOIP模拟赛 T1】A(A)(暴搜)

    打表+暴搜 这道题目,显然是需要打表的,不过打表的方式可以有很多. 我是打了两个表,分别表示每个数字所需的火柴棒根数以及从一个数字到另一个数字,除了需要去除或加入的火柴棒外,至少需要几根火柴棒. 然后 ...

  3. 【2019.7.25 NOIP模拟赛 T1】变换(change)(思维+大分类讨论)

    几个性质 我们通过推式子可以发现: \[B⇒AC⇒AAB⇒AAAC⇒C\] \[C⇒AB⇒AAC⇒AAAB⇒B\] 也就是说: 性质一: \(B,C\)可以相互转换. 则我们再次推式子可以发现: \[ ...

  4. 【2019.7.22 NOIP模拟赛 T1】麦克斯韦妖(demon)(质因数分解+DP)

    暴力\(DP\) 先考虑暴力\(DP\)该怎么写. 因为每个序列之后是否能加上新的节点只与其结尾有关,因此我们设\(f_i\)为以\(i\)为结尾的最长序列长度. 每次枚举一个前置状态,判断是否合法之 ...

  5. 【2019.7.24 NOIP模拟赛 T1】道路建设(road)(水题)

    原题与此题 原题是一道神仙不可做题,两者区别在于,原题不能有重边和自环. 然而,这题可以有重边... 于是这题就变成了一道大水题. 此题的解法 考虑如何构造. 对于\(n\le10^4\)的情况: 对 ...

  6. 【2019.7.26 NOIP模拟赛 T3】化学反应(reaction)(线段树优化建图+Tarjan缩点+拓扑排序)

    题意转化 考虑我们对于每一对激活关系建一条有向边,则对于每一个点,其答案就是其所能到达的点数. 于是,这个问题就被我们搬到了图上,成了一个图论题. 优化建图 考虑我们每次需要将一个区间向一个区间连边. ...

  7. 【2019.7.16 NOIP模拟赛 T1】洗牌(shuffle)(找环)

    找环 考虑每次洗牌其实是一次置换的过程,而这样必然就会有循环出现. 因此我们直接通过枚举找出每一个循环,询问时只要找到环上对应的位置就可以了. 貌似比我比赛时被卡成\(30\)分的倍增简单多了? 代码 ...

  8. 【2019.7.15 NOIP模拟赛 T1】夹缝(mirror)(思维题)

    思维题 此题应该是比较偏思维的. 假设一次反射后前进的距离是\(2^x(2y+1)\),则显然,它可以看做是前进距离为\(2^x\)的光线经过了\((2y+1)\)次反射,两者是等价的,甚至后者可能还 ...

  9. 20161007 NOIP 模拟赛 T1 解题报告

    排序 3.1 题意描述 众所周知,熟练掌握至少一种排序算法是参加NOIP的必备技能.常见的排序算法有冒泡 排序.归并排序.快速排序.奇偶排序.猴子排序.梳排序.鸡尾酒排序.臭皮匠排序等. 在这里,介绍 ...

随机推荐

  1. geth 基本使用

    概要 geth 是以太坊的官方 golang 客户端. 通过 geth 的使用可以直观的了解以太坊, 乃至区块链的运作. 下面, 通过 geth 来构造一次搭建私链, 创建账户, 挖矿, 交易的流程. ...

  2. Loj #2719. 「NOI2018」冒泡排序

    Loj #2719. 「NOI2018」冒泡排序 题目描述 最近,小 S 对冒泡排序产生了浓厚的兴趣.为了问题简单,小 S 只研究对 *\(1\) 到 \(n\) 的排列*的冒泡排序. 下面是对冒泡排 ...

  3. CSS3 滤镜Filter亮度动画

    CSS3 滤镜Filter亮度动画 -webkit-filter:brightness 值越高 亮度越亮<pre><!DOCTYPE html><html lang=&q ...

  4. win10怎么打开服务界面?

    在键盘上同时点击“win+R”键弹出运行界面,输入services.msc,按确定. 这时就弹出了服务的界面,如图:

  5. C# 爬虫相关的、可供参考的开源项目

    1. Abots https://github.com/sjdirect/abot/ 2. DotnetSpider https://github.com/dotnetcore/DotnetSpide ...

  6. CentOS安装etcd和flannel实现Docker跨物理机通信

    1.安装etcd yum install etcd systemctl stop etcd systemctl start etcd systemctl status etcd systemctl e ...

  7. OWIN,Katana,identity整体概述

    在用asp.net identity的时候,发现很多概念不是很懂,特地去查资料了解了一些相关信息,现在做下笔记. 1.OWIN,OWIN是Open Web Server Interface for . ...

  8. C# 方法的out、ref、params参数

    一.out参数实例 [实例]求一个数组中的最大值.最小值.总和.平均值 class Program { static void Main(string[] args) { //写一个方法 求一个数组中 ...

  9. ABP中文网的一些BUG

    之前一些翻译了的文档没有及时更新.比如 IAsyncCrudAppService接口在很久之前的版本就已经改为了ICrudAppService,如果是在官网下载的最新实例中IAsyncCrudAppS ...

  10. SQL Server 跨服务器、跨版本使用复制 (2008、2012)

    在两台不同的服务器间实现SQL Server 的发布和订阅,需要一些设置. 测试环境:2008数据库.2012数据库,可实现跨版本发布订阅 本次测试是08的数据库做发布端 ,使用08数据及12数据库均 ...