【bzoj3122】: [Sdoi2013]随机数生成器 数论-BSGS
当a>=2 化简得


然后 BSGS 求解
其他的特判 :
当 x=t n=1
当 a=1 
当 a=0 判断b==t
/* http://www.cnblogs.com/karl07/ */
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <map>
#include <algorithm>
using namespace std; #define LL long long
int T;
LL a,b,x,t,p; LL Q_pow(LL x,LL y,LL p){
LL ans=;
while (y){
if (y&) ans=ans*x%p;
x=x*x%p; y=(y>>);
}
return ans;
} LL BSGS(LL a,LL b,LL p){
if ((a== && b!=) || (a== && b!=)) return -;
map<LL,LL> x;
LL sz=ceil(sqrt(p)),k=,inv;
x.clear();
x[]=; inv=Q_pow(Q_pow(a,sz,p),p-,p);
for (int i=;i<sz;i++){
k=k*a%p;
if (!x.count(k)) x[k]=i;
}
for (int i=;i<sz;i++){
if (x.count(b)) return i*sz+x[b];
b=b*inv%p;
}
return -;
} int main(){
scanf("%d",&T);
for (int tt=;tt<=T;tt++){
scanf("%lld%lld%lld%lld%lld",&p,&a,&b,&x,&t);
if (x==t) {
puts("");
}else{
if (a==) {
printf("%d\n",b==t ? : -);
}
if (a==) {
printf("%lld\n",b== ? - : (t-x+p)%p*Q_pow(b,p-,p)%p+);
}
if (a>=){
LL inv=Q_pow(a-,p-,p);
b=b*inv%p;
t=(t+b)%p;
x=(x+b)%p;
t=t*Q_pow(x,p-,p)%p;
printf("%lld\n",BSGS(a,t,p)+);
}
}
}
return ;
}
【bzoj3122】: [Sdoi2013]随机数生成器 数论-BSGS的更多相关文章
- BZOJ3122  [Sdoi2013]随机数生成器  【BSGS】
		题目 输入格式 输入含有多组数据,第一行一个正整数T,表示这个测试点内的数据组数. 接下来T行,每行有五个整数p,a,b,X1,t,表示一组数据.保证X1和t都是合法的页码. 注意:P一定为质数 输出 ... 
- 【BZOJ3122】随机数生成器(BSGS,数论)
		[BZOJ3122]随机数生成器(BSGS,数论) 题面 BZOJ 洛谷 题解 考虑一下递推式 发现一定可以写成一个 \(X_{i+1}=(X_1+c)*a^i-c\)的形式 直接暴力解一下 \(X_ ... 
- bzoj3122 [SDOI2013]随机数生成器
		bzoj3122 [SDOI2013]随机数生成器 给定一个递推式, \(X_i=(aX_{i-1}+b)\mod P\) 求满足 \(X_k=t\) 的最小整数解,无解输出 \(-1\) \(0\l ... 
- 【洛谷 P3306】[SDOI2013]随机数生成器 (BSGS)
		题目链接 怎么这么多随机数生成器 题意见原题. 很容易想到\(BSGS\)算法,但是递推式是\(X_{i+1}=(aX_i+b)\mod p\),这显然不是一个等比数列. 但是可以用矩阵乘法来求出第\ ... 
- BZOJ3122: [Sdoi2013]随机数生成器(BSGS)
		题意 题目链接 Sol 这题也比较休闲. 直接把\(X_{i+1} = (aX_i + b) \pmod P\)展开,推到最后会得到这么个玩意儿 \[ a^{i-1} (x_1 + \frac{b}{ ... 
- [bzoj3122][SDOI2013]随机数生成器 ——BSGS,数列
		题目大意 给定递推序列: F[i] = a*F[i-1] + b (mod c) 求一个最小的i使得F[i] == t 题解 我们首先要化简这个数列,作为一个学渣,我查阅了一些资料: http://d ... 
- bzoj千题计划259:bzoj3122: [Sdoi2013]随机数生成器
		http://www.lydsy.com/JudgeOnline/problem.php?id=3122 等比数列求和公式+BSGS #include<map> #include<c ... 
- [Sdoi2013]随机数生成器(BSGS)
		#include<cstdio> #include<cstring> #include<cmath> #include<iostream> #inclu ... 
- 洛谷P3306 [SDOI2013]随机数生成器(BSGS)
		传送门 感觉我BSGS都白学了……数学渣渣好像没有一道数学题能自己想出来…… 要求$X_{i+1}=aX_i+b\ (mod \ \ p)$ 左右同时加上$\frac{b}{a-1}$,把它变成等比数 ... 
随机推荐
- HTML5通信
			跨文档消息传输 HTML5中提供了在网页文档之间互相接收与发送信息的功能.使用这个功能只要获取到网页所在窗口对象的实例,无论是否同源都可以实现跨域通信.经常用于不同frame之间的通信. 当我们想要接 ... 
- appium_python-测试报告模板话化
			我们用python拓展模板 HTMLTestRunner.py python3 要自己重新改写下输出输入接口,可直接下载 改好的 地址 链接:http://pan.baidu.com/s/1hsOBw ... 
- cURL使用教程及实例演示
			curl里面的函数不多,主要有: curl_init — 初始化一个CURL会话curl_setopt — 为CURL调用设置一个选项curl_exec — 执行一个CURL会话curl_close ... 
- 【Android 多媒体应用】使用MediaCodec将摄像头采集的视频编码为h264
			MainActivity.java import android.app.Activity; import android.graphics.ImageFormat; import android.h ... 
- ie6-ie8不支持opacity,rgba解决方法
			半透明部分设置样式:opacity:0.7在ie9/ie10/ff/chrome/opera/safari显示正常. 但是这样在ie6-ie8中是不支持的,需要加上下面这句话: filter: pro ... 
- mysql存储过程@命名变量的区别
			存储过程中@是用来标识每一次运行存储过程都会保存的值.而直接命名是每一次都会初始化的局部变量.@@是用来标识全局变量. CREATE PROCEDURE prc_test ()BEGIN DECLAR ... 
- ImageView 的 ScaleType
			/** * Options for scaling the bounds of an image to the bounds of this view. 将一个图片的边界缩放到这个view边界的几种选 ... 
- JAVA基础知识总结12(多线程)
			进程:正在进行中的程序.其实进程就是一个应用程序运行时的内存分配空间. 线程:其实就是进程中一个程序执行控制单元,一条执行路径.进程负责的是应用程序的空间的标示.线程负责的是应用程序的执行顺序. 一个 ... 
- 图片缓存核心类LruCache
			该类类似一个缓存池,具体可参考 http://www.fengfly.com/plus/view-214546-2.html 
- PHP自定义函数获取汉字首字母的方法
			使用场景:城市列表等根据首字母排序的场景 function getFirstCharter($str) { if (empty($str)) { return ''; } $fchar = ord($ ... 
