「ZJOI2020」密码
题目描述
Bob 喜欢 Alice。
Alice 和 Bob 想要进行加密通信,于是他们自己设计了一套加密算法进行身份验证。你知道这个加密算法并不可靠,并截获了 Alice 和 Bob 之间的信息。现在你想要恢复出 Alice 的密钥。
加密协议
Alice 和 Bob 约定了一个大质数 p,一个随机范围值 err 和一个在 0∼p−1 之间均匀随机生成的整数密钥 x。其中 p 和 err 的值是公开的,而 x 的值只有 Alice 和 Bob 知道。
当 Bob 想要确认 Alice 的身份时:
- Bob 生成 m 个在 0∼p−1 之间均匀随机生成的 ai 并发给 Alice
- 对于每个 ai,Alice 会返回给 Bob aix 模 p 的值
- 为了防止窃听,Alice 会给结果加上一个在 −⌈2err⌉ 到 ⌈2err⌉ 之间均匀随机生成的扰动
即,Alice 会返回给 Bob m 组形如:
aix+bi≡ci(modp)
的等式,其中:
- bi 为一个不公开的在 −⌈2err⌉ 到 ⌈2err⌉ 之间均匀随机生成的数
- ai 为随机生成的数
- ai,p,err,ci 为公开的数
输入格式
第一行输入一个整数 T,表示数据组数。
对于每组数据:
- 第一行输入三个整数 m,p,err
- 接下来 m 行,每行两个整数 ai,ci
符号的含义和题面中相同。
输出格式
输出 T 行,对于每组测试数据,输出一个 0 到 p−1 之间整数表示答案。数据保证有解并且解唯一。
数据范围与提示
- 对于前 10% 的数据,满足 err≤106
- 对于前 20% 的数据,满足 err≤108
- 对于前 30% 的数据,满足 err≤1011
- 对于前 40% 的数据,满足 err≤1012
- 对于另外 20% 的数据,满足 p≤1016,m=2000
- 对于 100% 的数据,满足:
- 1015≤p≤1018
- 50≤m≤2000
- 1≤err≤0.01p
- 1≤T≤5
- 0≤ai,ci≤p−1
- 保证 p 为素数