推式子

我们设\(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. 【转】win7旗舰版英文版下载(64位|32位)|Windows7英文版ISO镜像

    Win7旗舰版SP1 64位ISO镜像下载地址:文件名:en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.isoSHA1:A491F985DCCFB5 ...

  2. PCL学习之:将超声数据按照PCL点云方式发布出去

    前言:基于2D激光雷达的机器人,想让它跑自动导航,众所周知有2个比较明显的缺陷,1,那就是普通的激光雷达无法对玻璃或是镜面物体有反映; 2,机器人避障时只能对某一个平面的物体有反映,超过或者低于这个平 ...

  3. mybatis批处理数据

    批处理数据主要有三种方式: 1.传统jdbc处理    2.mybatis批处理插入    3.使用executortype处理 jdbc 处理 1.通过 for循环插入 main方法如下所示: Co ...

  4. 解决 “version `GLIBCXX_3.4.21' not found ”问题

    https://blog.csdn.net/Heldrecom/article/details/85040411

  5. .net基础加强

    1.冒泡排序 请通过冒泡排序法对整数数组{ 1, 3, 5, 7, 90, 2, 4, 6, 8, 10 }实现升序排序 , , , , , , , , , }; BubbleSort(num); C ...

  6. [转]awsome c++

    原文链接 Awesome C++ A curated list of awesome C++ (or C) frameworks, libraries, resources, and shiny th ...

  7. Git上传到码云及其常见问题详解

    1.git init 初始化 2.git  remote origin add https://gitee.com/su_yong_qing/SyqSystem.git 这里注意把链接替换为自己的仓库 ...

  8. SAP MM Purchase Order History Category

    SAP MM Purchase Order History Category 1) ,These are different categories of PO history which is con ...

  9. git使用读书笔记

    Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE /* Style Definitions */ table.MsoNormalTable ...

  10. Android源码分析(一)-----如何快速掌握Android编译文件

    一 : Android.mk文件概述 主要向编译系统指定相应的编译规则.会被解析一次或多次.因此尽量减少源码中声明变量,因为这些变量可能会被多次定义从而影响到后面的解析.这个文件的语法会把源代码组织成 ...