说明
由于图片可能看不清,我们重新描述这个加密算法:
- 假设 SolarPea 要给 PolarSea 发一个消息 M′,那么他们会进行如下的操作。
- PolarSea 首先生成五个大整数 P,S4,S6,S7,S1,使得 P<S6<S4P 且 S5=S4P+S6 且 $(S_6\bmod P) ^ 3 < S_4 ^ 3 < S_1 ^ 3 < (S_1 + 1) ^ 3 < S_7 ^ 3 < P$,并计算 S3=S4P+S5。
- 然后 PolarSea 将 S3,S5,S7,S1 发给 SolarPea。
- SolarPea 拿到了 PolarSea 给他发的四个数。首先,他需要构造一个 M 使得 S1<M<S7,并且和 PolarSea 商量好一个通过 M 算出 M′ 的方法(例如若 M′ 为比较小的正整数,则可以令 M=M′+S1),这个方法是不保密的,所以拿到 M 就相当于拿到 M′ 了,所以你可以不用关心 M′ 而是只关心 M。
- SolarPea 生成了两个满足 (S3−S5)3<r<w 的数 w,r,并计算 C=(S3−S5)3w+MS5+r(S3−S5),然后将 C 发给 PolarSea。
- PolarSea 只需计算 $\frac{C \operatorname{\bmod} P}{(2S_5 - S_3) \operatorname{\bmod} P}$ 即可获得 M。
现在你截获了 PolarSea 和 SolarPea 之间的所有通信(即 S3,S5,S7,S1,C),请你利用已知的信息破解出 M。
输入格式
第一行,读入四个整数 S3,S5,S7,S1,表示公钥。
第二行,读入一个整数 C,表示密文。
输出格式
输出一行,包含一个值在 S1<M<S7 的整数 M,表示破解的明文。可以证明在给定限制下 M 唯一。
7001 4001 7 5
1155511307999246176590006
6
11083610 7305110 52 32
4578384821991465584924042474394616310820101790
39
提示
样例 1 解释
生成的 P=1000,S4=3,S6=1001,S7=7,S1=5。计算出的 S5=4001,S3=7001。
密文 M=6。加密时选取的 w=42796713439376,r=15045364725522,加密结果 C=1155511307999246176590006。
当然,这次加密是很弱的,因为 6 是 5 和 7 中间的唯一整数。
数据范围与约定
对于所有数据, P<10500,C<P10。
- 子任务 1(20 分):P<106。
- 子任务 2(20 分):P<1018。
- 子任务 3(20 分):P 为质数。
- 子任务 4(20 分):所有数均为随机生成。
- 子任务 5(20 分):无特殊限制。
Source:NFLSPC #6 E by asmend