luogu#P9929. [NFLSPC #6] 挑战大数因子分解
[NFLSPC #6] 挑战大数因子分解
题目背景
NFLSPC #6
在即,来不了现场的 SolarPea 要把自己的题目的 std 发给能去现场的 PolarSea。
为了防止有选手窃听他们的通信以获得 std,他们打算使用一个公钥加密算法来确保通信的安全性。
于是 SolarPea 使用了他在知乎上看到的有 “最大的加解密速度和安全性” 的算法,这个算法的安全性 “依赖于大数因子分解难题”:
你是一名拥有 factorization oracle
的参赛选手,并且你已经获得了公钥和明文。请你利用手上的 factorization oracle
,破解出 std 吧。
题目描述
由于图片可能看不清,我们重新描述这个加密算法:
- 假设 SolarPea 要给 PolarSea 发一个消息 ,那么他们会进行如下的操作。
- PolarSea 首先生成五个大整数 ,使得 且 且 $(S_6\bmod P) ^ 3 < S_4 ^ 3 < S_1 ^ 3 < (S_1 + 1) ^ 3 < S_7 ^ 3 < P$,并计算 。
- 然后 PolarSea 将 发给 SolarPea。
- SolarPea 拿到了 PolarSea 给他发的四个数。首先,他需要构造一个 使得 ,并且和 PolarSea 商量好一个通过 算出 的方法(例如若 为比较小的正整数,则可以令 ),这个方法是不保密的,所以拿到 就相当于拿到 了,所以你可以不用关心 而是只关心 。
- SolarPea 生成了两个满足 的数 ,并计算 ,然后将 发给 PolarSea。
- PolarSea 只需计算 $\frac{C \operatorname{\bmod} P}{(2S_5 - S_3) \operatorname{\bmod} P}$ 即可获得 。
现在你截获了 PolarSea 和 SolarPea 之间的所有通信(即 ),请你利用已知的信息破解出 。
输入格式
第一行,读入四个整数 ,表示公钥。
第二行,读入一个整数 ,表示密文。
输出格式
输出一行,包含一个值在 的整数 ,表示破解的明文。可以证明在给定限制下 唯一。
7001 4001 7 5
1155511307999246176590006
6
11083610 7305110 52 32
4578384821991465584924042474394616310820101790
39
提示
样例 1 解释
生成的 ,,,,。计算出的 ,。
密文 。加密时选取的 ,,加密结果 。
当然,这次加密是很弱的,因为 是 和 中间的唯一整数。
数据范围与约定
对于所有数据, ,。
- 子任务 1( 分):。
- 子任务 2( 分):。
- 子任务 3( 分): 为质数。
- 子任务 4( 分):所有数均为随机生成。
- 子任务 5( 分):无特殊限制。
Source:NFLSPC #6 E by asmend