CodeForces 1091G. New Year and the Factorisation Collaboration
题目简述:若你获得“超能力”:固定$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的更多相关文章
- CF 1091E New Year and the Factorisation Collaboration
昨晚Good Bye 2018D题没做出来,车翻大了…… 官方题解 传送门 初赛知识:一个无向图所有顶点度数之和为偶数.然而这东西还有一个高端的名字:Handshaking lemma 但是 ...
- python爬虫学习(5) —— 扒一下codeforces题面
上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...
- 【Codeforces 738D】Sea Battle(贪心)
http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...
- 【Codeforces 738C】Road to Cinema
http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...
- 【Codeforces 738A】Interview with Oleg
http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...
- CodeForces - 662A Gambling Nim
http://codeforces.com/problemset/problem/662/A 题目大意: 给定n(n <= 500000)张卡片,每张卡片的两个面都写有数字,每个面都有0.5的概 ...
- CodeForces - 274B Zero Tree
http://codeforces.com/problemset/problem/274/B 题目大意: 给定你一颗树,每个点上有权值. 现在你每次取出这颗树的一颗子树(即点集和边集均是原图的子集的连 ...
- CodeForces - 261B Maxim and Restaurant
http://codeforces.com/problemset/problem/261/B 题目大意:给定n个数a1-an(n<=50,ai<=50),随机打乱后,记Si=a1+a2+a ...
- CodeForces - 696B Puzzles
http://codeforces.com/problemset/problem/696/B 题目大意: 这是一颗有n个点的树,你从根开始游走,每当你第一次到达一个点时,把这个点的权记为(你已经到过不 ...
随机推荐
- ubuntu环境准备
一. 桌面方面看起来比较不爽,12的版本用起更不习惯,决定改成命令行登陆 a. vi /ect/default/grub 文件 b. 修改成第二个红框的情况 c. 执行update-grub命令 d ...
- C#设计模式总结 C#设计模式(22)——访问者模式(Vistor Pattern) C#设计模式总结 .NET Core launch.json 简介 利用Bootstrap Paginator插件和knockout.js完成分页功能 图片在线裁剪和图片上传总结 循序渐进学.Net Core Web Api开发系列【2】:利用Swagger调试WebApi
C#设计模式总结 一. 设计原则 使用设计模式的根本原因是适应变化,提高代码复用率,使软件更具有可维护性和可扩展性.并且,在进行设计的时候,也需要遵循以下几个原则:单一职责原则.开放封闭原则.里氏代替 ...
- Python+Selenium ----unittest单元测试框架
unittest是一个单元测试框架,是Python编程的单元测试框架.有时候,也做叫做“PyUnit”,是Junit的Python语言版本.这里了解下,Junit是Java语言的单元测试框架,Java ...
- linux的su和sudo(转载)
来源:http://www.jb51.net/LINUXjishu/12713.html 一. 使用 su 命令临时切换用户身份 1.su 的适用条件和威力 su命令就是切换用户的工具,怎么理解呢?比 ...
- EasyRTMP实现的一套简单、高效、易用的全平台(Windows/Linux/ARM/Android/iOS)RTMP直播推送库
本文转自EasyDarwin开源团队成员Kim的博客:http://blog.csdn.net/jinlong0603/article/details/52938980 EasyRTMP介绍 Easy ...
- Net Core环境开发与调试
NET Core 包括.NET Core Runtime 和 .NET Core SDK: .NET Core = 应用运行依赖的 .NET Core Runtime .NET Core SDK = ...
- jQuery 给div绑定单击事件
说明:这篇随笔介绍的是怎么给div添加单击(click)事件.不再废话 直接看代码 <%@ Page Language="C#" AutoEventWireup=" ...
- Web UI回归测试 -- BackstopJS 入门
BackstopJS是一个测试工具,用于测试ui图和实际项目是否偏差. 话不多说,直接启动一个项目吧测试吧. 1.首先全局安装BackstopJS npm install -g backstopjs ...
- Unity导包配置详解
Player Settings is where you define various parameters (platform specific) for the final game that y ...
- 提取html的正文
1 using System; 2 using System.Text; 3 namespace HtmlStrip 4 { 5 class MainClass 6 { 7 ...