题目描述
HL 中学茶余饭后喜欢玩游戏,一个游戏规则如下:
共两人参加游戏,若第一个人当前手中的数为 w1,则下一秒他手上的数将会变成(x1w1 + y1) mod m;若第二个人当前手中的数为 w2,则下一秒他手上的数将会变为(x2w2 + y2) mod m。a mod b 表示 a 除以 b 的余数。
第 0 秒,两个人手上的数分别为 h1, h2; 请求出最快在第几秒,第一个人手上的数为 a1 并且同时第二个人手上的数为 a2。若不可能,则输出-1。
输入格式
输入包含 5*T+1 行。
第一行为一个正整数 T,表示数据组数。
对于接下来的每一组数据,第一行为一个正整数 m,第二行包括两个整数h1, a1,第三行包括两个整数 x1, y1,第四行包括两个整数 h2, a2,第五行包括两个整数 x2, y2。
输出格式
输出包含 T 行。
对于每一组数据,输出一行,一个整数,如题所述。
样例数据
input
2
5
4 2
1 1
0 1
2 3
1023
1 2
1 0
1 2
1 1
output
3
-1
数据规模与约定
对于 30%的数据:m<=1000
对于 100%的数据:T<=5, h1≠a1 且 h2≠a2,2<=m<=10^6,0<=h1,a2,x1,y1,h2,a2,x2,y2
时间限制:
1s1s
空间限制:
256MB
数字游戏具体思路
显然,如果使用暴力则不断枚举即可。但是显然会超市,我们必须要用数学方法去解决这一个问题。
至于如何数学,我们不妨举一个例子来进行理解。
例如有这么一串数字: 1,2,3,4,3,4,3,4.......... 1 , 2 , 3 , 4 , 3 , 4 , 3 , 4..........
相信你一定可以看出,出现了不断的循环。这是为什么?因为每做一次运算都必须要对一个数 m m 取模,并且当再次出现和原来相同的数字的时候便会有重复的个数,因此必然会出现循环。而且如果去模拟,循环会消耗大量的时间复杂度,我们同样可以在时间上寻求优化的办法。
我们知道,出现重复,会有三种情况
两者都在两者进入循环之前提前遇到