题目简述:若你获得“超能力”:固定$n$,对任意$a$,可以快速求出$x \in [0, n)$(若存在),使得$x^2 \equiv a \pmod n$,若存在多个$x$满足条件,则返回其中一个(对固定的$a$返回固定的$x$)。给定$n \leq 2^{1024}$,求其质因数分解。保证$n$是至多$10$个不同质数之积。

解:code

令$f(a)$表示通过“超能力”获得的$x$(若存在),使得$x^2 \equiv a \pmod n$。

随机选择$x \in [1, n-1]$,令$y = f(x^2)$。

设$n = p_1 p_2 \dots p_k$,其中$p_1, p_2, \dots, p_k$是互不相同的质数,由中国剩余定理(Chinese Remainder Theorem)得

$$ y^2 \equiv x^2 \pmod n \Longleftrightarrow \begin{cases} y^2 \equiv x^2 \pmod {p_1} \\ \vdots \\ y^2 \equiv x^2 \pmod {p_k} \end{cases} $$

对每个质数$p_i$,$y^2 \equiv x^2 \pmod {p_i}$的解为$y \equiv x \pmod {p_i}$或$y \equiv -x \pmod {p_i}$。因此

$$ f(x^2) \equiv \pm x \pmod {p_i}. $$

于是,

$$ \Pr \Big[ f(x^2) \equiv x \pmod{p_i} \Big| p_i \not| x \Big] = \frac 1 2, $$

再由中国剩余定理可得

$$ \Pr \Big[ f(x^2) \equiv x \pmod n \Big| \gcd(x,n) = 1 \Big] = \frac 1 {2^k}. $$

也即,若$x$与$n$互质,即$\gcd(n, x) = 1$,则我们可以通过“超能力”得到$y \neq x$的概率为$1 - 2^{-k}$。

注:若把$x$与$n$互质的条件去掉,则类似可有

$$ \Pr \Big[ f(x^2) \equiv x \pmod n \Big] \leq \frac 1 2. $$

假设得到了一个$y = f(x^2) \neq x$,则$x^2 \equiv y^2 \pmod n$,则必定有$n = n_1n_2$,其中$n_1, n_2 > 1$,使得$x \equiv y \pmod {n_1}$但$x \not\equiv y \pmod {n_2}$,即$n_1 | (x-y)$但$n_2 \not| (x-y)$,又$\gcd(n_1,n_2) = 1$,故$\gcd(n, x-y) = n_1$。此时,我们已将$n$分解为更小的两个数的乘积。重复这个操作$k-1$次,便能得到$n$的质因数分解。

注:由于对称性,$\gcd(n, x-y)$与$\gcd(n, x+y)$在概率上性质是一样的。在$n$分解成若干个正整数之积后,以上分析依然适用于分解$n$的因子的情形。

CodeForces 1091G. New Year and the Factorisation Collaboration的更多相关文章

  1. CF 1091E New Year and the Factorisation Collaboration

    昨晚Good Bye 2018D题没做出来,车翻大了…… 官方题解      传送门 初赛知识:一个无向图所有顶点度数之和为偶数.然而这东西还有一个高端的名字:Handshaking lemma 但是 ...

  2. python爬虫学习(5) —— 扒一下codeforces题面

    上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...

  3. 【Codeforces 738D】Sea Battle(贪心)

    http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...

  4. 【Codeforces 738C】Road to Cinema

    http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...

  5. 【Codeforces 738A】Interview with Oleg

    http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...

  6. CodeForces - 662A Gambling Nim

    http://codeforces.com/problemset/problem/662/A 题目大意: 给定n(n <= 500000)张卡片,每张卡片的两个面都写有数字,每个面都有0.5的概 ...

  7. CodeForces - 274B Zero Tree

    http://codeforces.com/problemset/problem/274/B 题目大意: 给定你一颗树,每个点上有权值. 现在你每次取出这颗树的一颗子树(即点集和边集均是原图的子集的连 ...

  8. CodeForces - 261B Maxim and Restaurant

    http://codeforces.com/problemset/problem/261/B 题目大意:给定n个数a1-an(n<=50,ai<=50),随机打乱后,记Si=a1+a2+a ...

  9. CodeForces - 696B Puzzles

    http://codeforces.com/problemset/problem/696/B 题目大意: 这是一颗有n个点的树,你从根开始游走,每当你第一次到达一个点时,把这个点的权记为(你已经到过不 ...

随机推荐

  1. bootstrap到底是用来做什么的(概念)

    Bootstrap官网:http://v3.bootcss.com/ Bootstrap是Twitter推出的一个用于前端开发的开源工具包.它由Twitter的设计师Mark Otto和Jacob T ...

  2. cocos2dx3.2 学习笔记(2)--ActionManagerTest

    前面看完了 CppTests的基本框架及流程.如今准备看看详细的每一个Test了 从哪里開始看呢. 额,就第一个吧(ActionManagerTest) 首先看看效果吧,执行了下.发现有几种效果.看不 ...

  3. anaconda的所有版本大全--下载地址

    地址: https://repo.continuum.io/archive/ 内容: Anaconda installer archive Filename Size Last Modified MD ...

  4. PythonCookBook笔记——文件与IO

    文件与IO 所有的程序都要处理输入与输出,涉及到文本.二进制文件.文件编码和对文件名.目录的操作. 读写文本数据 需要读写各种不同编码的文本数据,使用rt模式的open()函数. 该读写操作使用系统默 ...

  5. JS中小数如何转化为百分数并能四舍五入

    <script type="text/javascript">//n表示百分数保留的位数 function toPercent(n){ n = n || 2; retu ...

  6. [ExtJS5学习笔记]第五节 使用fontawesome给你的extjs5应用添加字体图标

    本文地址:http://blog.csdn.net/sushengmiyan/article/details/38458411本文作者:sushengmiyan-------------------- ...

  7. Java实现MD5加密解密类

    http://blog.csdn.net/m_changgong/article/details/4361526

  8. Docker容器的网络连接:

    yw1989@ubuntu:~$ ifconfig docker0 Link encap:Ethernet HWaddr 02:42:97:61:42:9f inet addr:172.17.0.1 ...

  9. php设计模式之--组合模式

    php组合模式主要用于上下级关系,可以新增叶子和树枝,分析如下代码即可明白组合模式的含义: <?php header('Content-Type:text/html;charset=utf-8' ...

  10. jquery特效(6)—判断复选框是否选中进行答题提示

    前面有一段时间思想开了小差,跟着师父学习了一段时间才发现差距很大,看来我要奋起直追~\(≧▽≦)/~啦啦啦. 最近公司在做一个项目,需要根据用户选择的选项给出相应的提示,下面来看我写的测试程序的效果: ...