/*
已知递推数列 F[i]=a*F[i-1]+b (%c)
解方程F[x]=t an+1 = b*an + c
an+1 + c/(b-1) = b(an + c/(b-1))
an+1 + c/(b-1) = b^(n-1) * (a1+c/(b-1)) 根据这个数列可得
F[x] = (F[1] + b/(a-1))*a^(x-1) - b/(a-1) = t; (F[1] + b/(a-1))*a^(x-1) = t+b/(a-1)
a^(x-1) = (t+b/(a-1)) / (F[1]+b/(a-1))
用逆元算出右边,再用bsgs算x即可
*/
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll p,a,b,f1,t; ll Pow(ll a,ll b,ll p){
ll res=;
while(b){
if(b%)
res=res*a%p;
b>>=;a=a*a%p;
}
return res;
}
ll inv(ll x,ll p){
return Pow(x,p-,p);
} ll bsgs(ll a,ll b, ll p){
//用来求a^x=b, 令x=i*t-j,(a^t)^i = b*a^j
//先把右边的t个值存下来
map<ll,ll>hash;
hash.clear();
b%=p;
ll t=sqrt(p)+;
ll tmp=b;
for(ll j=;j<t;j++){
ll val=b*Pow(a,j,p)%p;
hash[val]=j;
} a=Pow(a,t,p);
if(a==)return b==?:-;
for(int i=;i<=t;i++){//这个地方把循环起点改为1
ll val=Pow(a,i,p);
int j=hash.find(val)==hash.end()?-:hash[val];
if(j>= && i*t-j>=)
return i*t-j;
}
return -;
}
//F[i]=a*F[i-1]+b (%c)
int main(){
int T;cin>>T;
while(T--){
cin>>p>>a>>b>>f1>>t;
if(f1==t){puts("");continue;}
if(a==){
if(t==b)puts("");
else puts("-1");
continue;
}
if(a==){
if(b==){puts("-1");continue;}
ll ans = (((t-f1)%p+p)%p*inv(b,p))%p;
cout<<ans+<<'\n';
continue;
} a%=p;b%=p;f1%=p;t%=p; ll tmp=b*inv(a-,p)%p;
t=(t+tmp)%p;
t=t*inv(f1+tmp,p)%p;
t=t*a%p; cout<<bsgs(a,t,p)<<'\n';
}
}

bsgs+求数列通项——bzoj3122(进阶指南模板该进)的更多相关文章

  1. MT【312】特征根法求数列通项

    (2016清华自招领军计划37题改编) 设数列$\{a_n\}$满足$a_1=5,a_2=13,a_{n+2}=\dfrac{a^2_{n+1}+6^n}{a_n}$则下面不正确的是(      )A ...

  2. C++模板进阶指南:SFINAE

    C++模板进阶指南:SFINAE 空明流转(https://zhuanlan.zhihu.com/p/21314708) SFINAE可以说是C++模板进阶的门槛之一,如果选择一个论题来测试对C++模 ...

  3. SQL 横转竖 、竖专横 (转载) 使用Dapper.Contrib 开发.net core程序,兼容多种数据库 C# 读取PDF多级书签 Json.net日期格式化设置 ASPNET 下载共享文件 ASPNET 文件批量下载 递归,循环,尾递归 利用IDisposable接口构建包含非托管资源对象 《.NET 进阶指南》读书笔记2------定义不可改变类型

    SQL 横转竖 .竖专横 (转载)   普通行列转换 问题:假设有张学生成绩表(tb)如下: 姓名 课程 分数 张三 语文 74 张三 数学 83 张三 物理 93 李四 语文 74 李四 数学 84 ...

  4. Weex入门与进阶指南

    Weex入门与进阶指南 标签: WeexiOSNative 2016-07-08 18:22 59586人阅读 评论(8) 收藏 举报 本文章已收录于:  iOS知识库  分类: iOS(87)  职 ...

  5. HTML5游戏开发进阶指南(亚马逊5星畅销书,教你用HTML5和JavaScript构建游戏!)

    HTML5游戏开发进阶指南(亚马逊星畅销书,教你用HTML5和JavaScript构建游戏!) [印]香卡(Shankar,A.R.)著 谢光磊译 ISBN 978-7-121-21226-0 201 ...

  6. 【读书笔记】读《高性能网站建设指南》及《高性能网站建设进阶指南:Web开发者性能优化最佳实践》

    这两本书就一块儿搞了,大多数已经理解,简单做个标记.主要对自己不太了解的地方,做一些记录.   一.读<高性能网站建设指南> 0> 黄金性能法则:只有10%~20%的最终用户响应时间 ...

  7. POJ 2388 Who's in the Middle (快速选择算法:O(N)求数列第K大)

    [题意]求数列中间项. ---这里可以扩展到数列第K项. 第一次做的时候直接排序水过了= =--这一次回头来学O(N)的快速选择算法. 快速选择算法基于快速排序的过程,每个阶段我们选择一个数为基准,并 ...

  8. HDOJ2009求数列的和

    求数列的和 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  9. 练习2 H题 - 求数列的和

      Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u   Description 数列的 ...

随机推荐

  1. react 组件的构造函数

    constructor 函数时组件最先执行的函数 class childen extends react.Component{ constructor(props){ super(props); th ...

  2. java拷贝--clone

    大纲: java如何拷贝对象. 浅拷贝 深拷贝 一.java如何拷贝对象 Person p = new Person(); Person p2 = p; 上例并不是一个拷贝操作,只是把p对象的引用赋给 ...

  3. JAVA jar命令(一)-jar打包class文件

    jar包本质上是将所有class文件.资源文件压缩打成一个包(也可以选择不压缩),可选择在jar包中生成META-INF/MANIFEST.MF文件,MANIFEST.MF是清单文件,里面可以记录主类 ...

  4. Ruby 环境

    Ruby 环境 本地环境设置 如果您想要设置 Ruby 编程语言的环境,请阅读本章节的内容.本章将向您讲解与环境设置有关的所有重要的主题.建议先学习下面几个主题,然后再进一步深入学习其他主题: Lin ...

  5. curl 命令帮助及使用

    目录 一.简介 二.curl 帮助文档 三.curl 的使用 前言 刚接触 curl 就发现它的非常强大.奈何帮助文档全是英文,看起来贼费劲.无奈只能硬着头皮用自己蹩脚的英语和翻译软件硬生生的翻译了一 ...

  6. 【NIO】NIO之浅谈内存映射文件原理与DirectMemory

    Java类库中的NIO包相对于IO 包来说有一个新功能是内存映射文件,日常编程中并不是经常用到,但是在处理大文件时是比较理想的提高效率的手段.本文我主要想结合操作系统中(OS)相关方面的知识介绍一下原 ...

  7. Python查看对象属性的方法

    帮助https://docs.python.org/2/library/functions.html dir() 函数 D:\pythontest>python Python (v3. , :: ...

  8. NX二次开发-UFUN求对象的最大边界框UF_MODL_ask_bounding_box

    NX9+VS2012 #include <uf.h> #include <uf_obj.h> #include <uf_modl.h> #include <u ...

  9. LeetCode 1041. Robot Bounded In Circle (困于环中的机器人)

    题目标签:Math 题目让我们判断机器人是否是一直在走一个圈. 当我们把 instructions 走完一遍时候: 1. 如果机器人回到了原点,那么它是在走一个圈. 2. 如果机器人的方向没有改变,那 ...

  10. 导出lab动态命名文件夹文件名

    set tmp=%date:~0,10%echo %tmp:/=-%mkdir %tmp:/=-%cd %tmp:/=-%exp meet/meet@orcl_11 file=%tmp:/=-%.dm ...