AT_pakencamp_2022_day1_n Paken Machine

题目描述

首先给定一个整数 $T$。请你针对 $T$ 组测试数据解决以下问题。 > hiikunZ 君收到了一台作为生日礼物的パ研マシン。 > > パ研マシン配备有一个显示屏、一盏灯和一个按钮,各有一个。 > > 开始时,显示屏上显示整数 $s$,灯亮为红色。 > > 每当 hiikunZ 君按下按钮一次,显示屏上的整数 $x$ 与灯的颜色将按如下规则发生变化。 > > - 若按钮按下前灯为红色,则 $x$ 变为 $A_r \times x + B_r$ 对素数 $P$ 取模的结果,且灯变为蓝色。 > - 若按钮按下前灯为蓝色,则 $x$ 变为 $A_b \times x + B_b$ 对素数 $P$ 取模的结果,且灯变为黄色。 > - 若按钮按下前灯为黄色,则 $x$ 变为 $A_y \times x + B_y$ 对素数 $P$ 取模的结果,且灯变回红色。 > > hiikunZ 君希望通过按按钮若干次(可为 $0$ 次),将显示屏上的整数变为 $t$。 > > 请判断是否可能实现,若可能,请输出实现所需按钮最少的按下次数。

输入格式

输入第一行为整数 $T$,表示测试数据组数。 随后 $T$ 行,每行描述一组测试数据,格式如下: $s\ t\ P\ A_r\ B_r\ A_b\ B_b\ A_y\ B_y$ 含义分别为:初始显示整数 $s$,目标整数 $t$,模数素数 $P$,红、蓝、黄灯对应的 $A$ 与 $B$ 参数。

输出格式

请按顺序输出 $T$ 行答案。 对于第 $i$ 组测试数据,若能将显示屏上的整数变为 $t$,输出所需最少按钮按下次数;否则输出 $-1$。

说明/提示

### 样例解释 1 以第 $1$ 组样例为例: 每次按钮与显示内容及灯变化如下: - 初始:灯为红色,显示整数 $1$。 - 第 $1$ 次按下:$1 \times 1 + 2 = 3$,对 $13$ 取模得 $3$,灯变为蓝色。 - 第 $2$ 次按下:$3 \times 3 + 4 = 13$,对 $13$ 取模得 $0$,灯变为黄色。 - 第 $3$ 次按下:$5 \times 0 + 6 = 6$,对 $13$ 取模得 $6$,灯变为红色。 - 第 $4$ 次按下:$1 \times 6 + 2 = 8$,对 $13$ 取模得 $8$,灯变为蓝色。 因此,按 $4$ 次按钮可将显示数变为 $8$。 第 $2$ 组样例中,无论如何操作,显示内容都将停留在 $0$,无法变为 $1$。 ### 数据范围 - $1 \leq T \leq 10$ - $2 \leq P \leq 10^9$ - $P$ 为素数 - $0 \leq A_r, A_b, A_y < P$ - $0 \leq B_r, B_b, B_y < P$ - $0 \leq s, t < P$ - 所有输入均为整数 由 ChatGPT 5 翻译