bzoj 3122: [Sdoi2013]随机数生成器【BSGS】
题目要求的是:
\]
后面这一大坨看着不舒服,所以考虑把它化掉,这里有两种做法:
做法一:两边同乘a-1
\]
\]
\]
\]
\]
注意这个很容易乘爆,记得随时取模
做法二:后面乘上a-1的逆元
\]
\]
\]
\]
\]
然后用BSGS解即可,记得加一
#include<iostream>
#include<cstdio>
#include<map>
#include<cmath>
using namespace std;
long long T,p,a,b,x,t,y,z;
map<long long,long long>mp;
long long ksm(long long a,long long b)
{
	long long r=1ll;
	a%=p;
	while(b)
	{
		if(b&1)
			r=r*a%p;
		a=a*a%p;
		b>>=1;
	}
	return r;
}
int main()
{
	scanf("%lld",&T);
	while(T--)
	{
		scanf("%lld%lld%lld%lld%lld",&p,&a,&b,&x,&t);
		if(x==t)
		{
			puts("1");
			continue;
		}
		if(a==0)
		{
			if(b==t)
				puts("2");
			else
				puts("-1");
			continue;
		}
		if(a==1&&b==0)
		{
			puts("-1");
			continue;
		}
		if(a==1)
		{
			long long now=ksm(b,p-2);
			printf("%lld\n",(((t-x)%p+p)%p*now%p+p)%p+1);
			continue;
		}
		y=a,z=((a*t%p-t+b)%p*ksm(a*x-x+b,p-2)%p+p)%p;
		//y=a,z=((t+b*ksm(a-1,p-2)%p)%p*ksm((x%p+b*ksm(a-1,p-2)%p)%p,p-2))%p;//(a*t-t+b)*ksm(a*x-x+b,p-2);做法二
		y%=p;
		if(!y&&!z)
		{
			puts("1");
			continue;
		}
		if(!y)
		{
			puts("-1");
			continue;
		}
		mp.clear();
		long long m=ceil(sqrt(p)),t=1;
		mp[1]=m+1;
		for(long long i=1;i<m;i++)
		{
			t=t*y%p;
			if(!mp[t])
				mp[t]=i;
		}
		long long tmp=ksm(y,p-m-1),now=1,f=0;
		for(long long k=0;k<m;k++)
		{
			long long i=mp[z*now%p];
			if(i)
			{
				if(i==m+1)
					i=0;
				printf("%lld\n",k*m+i+1);
				f=1;
				break;
			}
			now=now*tmp%p;
		}
		if(!f)
			puts("-1");
	}
	return 0;
}
bzoj 3122: [Sdoi2013]随机数生成器【BSGS】的更多相关文章
- bzoj 3122 : [Sdoi2013]随机数生成器 BSGS
		BSGS算法 转自:http://blog.csdn.net/clove_unique 问题 给定a,b,p,求最小的非负整数x,满足$a^x≡b(mod \ p)$ 题解 这就是经典的BSGS算法, ... 
- Bzoj 3122 [Sdoi2013]随机数生成器(BSGS+exgcd)
		Input 输入含有多组数据,第一行一个正整数T,表示这个测试点内的数据组数. 接下来T行,每行有五个整数p,a,b,X1,t,表示一组数据.保证X1和t都是合法的页码. 注意:P一定为质数 Outp ... 
- bzoj 3122 [Sdoi2013]随机数生成器(逆元,BSGS)
		Description Input 输入含有多组数据,第一行一个正整数T,表示这个测试点内的数据组数. 接下来T行,每行有五个整数p,a,b,X1,t,表示一组数据.保证X1和t都是合法的页码. ... 
- bzoj 3122: [Sdoi2013]随机数生成器
		#include<cstdio> #include<iostream> #include<map> #include<cmath> #define ll ... 
- 【BZOJ 3122】 [Sdoi2013]随机数生成器 (BSGS)
		3122: [Sdoi2013]随机数生成器 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1442 Solved: 552 Description ... 
- 【BZOJ3122】[Sdoi2013]随机数生成器 BSGS+exgcd+特判
		[BZOJ3122][Sdoi2013]随机数生成器 Description Input 输入含有多组数据,第一行一个正整数T,表示这个测试点内的数据组数. 接下来T行,每行有五个整数p,a,b, ... 
- BZOJ3122: [Sdoi2013]随机数生成器(BSGS)
		题意 题目链接 Sol 这题也比较休闲. 直接把\(X_{i+1} = (aX_i + b) \pmod P\)展开,推到最后会得到这么个玩意儿 \[ a^{i-1} (x_1 + \frac{b}{ ... 
- 【bzoj3122】[Sdoi2013]随机数生成器  BSGS思想的利用
		题目描述 给出递推公式 $x_{i+1}=(ax_i+b)\mod p$ 中的 $p$.$a$.$b$.$x_1$ ,其中 $p$ 是质数.输入 $t$ ,求最小的 $n$ ,使得 $x_n=t$ . ... 
- [bzoj3122][SDOI2013]随机数生成器 ——BSGS,数列
		题目大意 给定递推序列: F[i] = a*F[i-1] + b (mod c) 求一个最小的i使得F[i] == t 题解 我们首先要化简这个数列,作为一个学渣,我查阅了一些资料: http://d ... 
随机推荐
- 免费SSL申请
			https://letsencrypt.org/ https://letsencrypt.org/docs/client-options/ ACMESharp (.NET, PowerShell) w ... 
- Educational Codeforces Round 50 (Rated for Div. 2)F. Relatively Prime Powers
			实际上就是求在[2,n]中,x != a^b的个数,那么实际上就是要求x=a^b的个数,然后用总数减掉就好了. 直接开方求和显然会有重复的数.容斥搞一下,但实际上是要用到莫比乌斯函数的,另外要注意减掉 ... 
- Spring Cloud(9):Config配置中心
			Config配置中心作用简单来讲:统一配置,方便管理 开源配置中心: 1.百度Disconf 2.阿里Diamand 3.Spring Cloud Config 搭建Config-Server 快速上 ... 
- 【APUE】【转】守护进程编写
			http://blog.csdn.net/zg_hover/article/details/2553321 守护进程(Daemon)是运行在后台的一种特殊进程.它独立于控制终端并且周期性地执行某种任务 ... 
- [转]图解eclipse 查看原始类出现The jar file rt.jar has no source attachment
			原文:http://blog.csdn.net/u011514810/article/details/53196371 ---------------------------------------- ... 
- Redis 命令行 常用总结
			http://www.redis.cn/commands.html# 1 Keys * 列出所有的keys redis > keys * ) "s:0" ) "o: ... 
- 网络基础笔记——OSI七层模型
			OSI七层模型 由于整个网络连接的过程相当复杂,包含硬件.软件数据封包与应用程序的互相链接等等.假设想要写一支将联网所有功能都串连在一块的程序.那么当某个小环节出现故障时,整仅仅程序都须要改写.所以我 ... 
- 【JS】JavaScript引擎的内部执行机制
			 近期在复习JavaScript,看到setTimeout函数时.想起曾经刚学时,在一本书上看过setTimeout()里的回调函数执行的间隔时间有昌不是后面设置的值.曾经没想太多.网上看了JS大 ... 
- MongoDB 自己定义函数
			定义 db.system.js.insert({ _id : "TestConcat", value : function TestConcat(s1, s2){ return s ... 
- C++ 虚函数与纯虚函数 浅析
			[摘要] 在虚函数与纯虚函数的学习中.要求理解虚函数与纯虚函数的定义,了解虚函数与纯虚函数在实例化上的差异.掌握两者在实现上的必要性.熟悉纯虚函数在子类与孙类的函数类型.本文即针对上述问题展开阐述. ... 
