n2

Shor 量子算法原理浅析

牧云@^-^@ 提交于 2019-12-02 02:09:25
学习这个算法时候网上介绍不多,只能硬啃论文; 本片文章是对Shor算法原理的一个简单描述,以及它用于解决什么样的问题,其实最关键的部分(关于QFT 量子傅里叶变换的内容)我并不理解,但这并不影响我们以数论的现有知识来学习理解这个算法。 背景 众所周知,RSA体制的安全性是建立在大数分解这一难题基础上的,严格说来,也只是涉及到两个大质数相乘所得到的合数。自RSA 诞生伊始,人们对其安全性的理论论证就 一直未停止过。由于 RSA 中指数运算保持了输入的乘积结构,这一点令人甚为担忧。 1994年,AT&T公司研究人员Shor发现了分解两个大质因数相乘合数的量子算法(质数就是素数),对RSA公钥密码体制产生强烈冲击;它不仅给量子计算机研究注入了活力,引发了量子计算和量子计算机研究的热潮。 原理 设n 1 、n 2 为两个奇质数(大于2的素数),而N = n 1 ·n 2 ,Shor算法概述如下: (1)随机取正整数y,要求y<N且与N互素,用量子计算机和相关算法求r = ord N (y),即y是关于N的阶数,r是使得y r Ξ 1 mod N成立的最小正整数( 也就是说,函数f(t) = y t mod N的最小正周期为r)。 (2)若r为奇数,则返回(1)重新取y。并重新求r,直到r为偶数为止。 (3) r为偶数,取 x Ξ y r/2 mod N。        故 x 2 Ξ 1

时间复杂度比较

∥☆過路亽.° 提交于 2019-12-01 17:01:05
排序方法 最坏时间复杂度 最好时间复杂度 平均时间复杂度 直接插入 O( n2 ) O(n) O( n2 ) 简单选择 O( n2 ) O(n2) O(n2) 起泡排序 O(n2) O(n) O(n2) 快速排序 O(n2) O(nlog2n) O(nlog2n) 堆排序 O(nlog2n) O(nlog2n) O(nlog2n) 归并排序 O(nlog2n) O(nlog2n) O(nlog2n) 来源: https://www.cnblogs.com/smartljy/p/11694669.html

Caesar's Legions(CodeForces-118D) 【DP】

社会主义新天地 提交于 2019-12-01 07:27:02
题目链接: https://vjudge.net/problem/CodeForces-118D 题意:有n1名步兵和n2名骑兵,现在要将他们排成一列,并且最多连续k1名步兵站在一起,最多连续k2名骑兵站在一起,求方案数。 思路:dp[i][j][res1][res2],表示排好了i人,并且当前最后一个人是j(j=1表示步兵, j=2表示骑兵),res1、res2分别表示步兵、骑兵的剩余数量。 xxmlala:真的贼激动啊,有史以来第一次在比赛中做出来非状态压缩的dp! 代码如下: 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 const int mo=1e8; 6 long long dp[220][3][110][110]; 7 int main(){ 8 int n1,n2,k[3]; 9 scanf("%d%d%d%d",&n1,&n2,&k[1],&k[2]); 10 memset(dp,-1,sizeof(dp)); 11 int kk1=min(k[1],n1),kk2=min(k[2],n2); 12 for(int i=1;i<=kk1;i++) 13 dp[i][1][n1-i][n2]=1; 14 for(int i=1;i<=kk2

排序算法

对着背影说爱祢 提交于 2019-11-30 13:33:34
常用的排序算法的时间复杂度和空间复杂度 (原博客) 排序法 最差时间分析 平均时间复杂度 稳定度 空间复杂度 冒泡排序 O(n 2 ) O(n 2 ) 稳定 O(1) 快速排序 O(n 2 ) O(n*log 2 n) 不稳定 O(log 2 n)~O(n) 选择排序 O(n 2 ) O(n 2 ) 不稳定 O(1) 二叉树排序 O(n 2 ) O(n*log 2 n) 不一顶 O(n) 插入排序 O(n 2 ) O(n 2 ) 稳定 O(1) 堆排序 O(n*log 2 n) O(n*log 2 n) 不稳定 O(1) 希尔排序 O O 不稳定 O(1) 1、时间复杂度 (1)时间频度 一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度或时间频度。记为T(n)。 (2)时间复杂度 在刚才提到的时间频度中,n称为问题的规模,当n不断变化时,时间频度T(n)也会不断变化。但有时我们想知道它变化时呈现什么规律。为此,我们引入时间复杂度概念。 一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示

第二次作业 熟悉使用工具

强颜欢笑 提交于 2019-11-30 05:42:23
GIT地址 https://github.com/yeyeah GIT用户名 yeayeah 学号后五位 62609 博客地址 https://www.cnblogs.com/yeyeah/ 作业链接 熟悉使用工具 1.环境配置过程 ①安装vs2017 就按照给出的博客链接,进行了安装, ②安装git 也是按照博客指导安装完成,没有遇到什么大问题。然后先进行代码的克隆。 ③代码克隆 2.代码设计 背景 阿超家里的孩子上小学一年级了,这个暑假老师给家长们布置了一个作业:家长每天要给孩子出一些合理的,但要有些难度的四则运算题目,并且家长要对孩子的作业打分记录。 作为程序员的阿超心想,既然每天都需要出题,那何不做一个可以自动生成小学四则运算题目与解决题目的命令行 “软件”呢。他把老师的话翻译一下,就形成了这个软件的需求: 程序接收一个 命令行参数 n ,然后随机产生 n 道加减乘除(分别使用符号 +-*/ 来表示)练习题,每个数字在 0 和 100 之间,运算符在 2 个 到 3 个之间。 由于阿超的孩子才上一年级,并不知道分数。所以软件所出的练习题 在运算过程中不得出现非整数 ,比如不能出现 3÷5+2=2.6 这样的算式。 练习题生成好后,将生成的 n 道练习题及其对应的正确答案输出到一个文件 subject.txt 中。 当程序接收的参数为4时,以下为一个输出文件示例。

第二次博客作业00

依然范特西╮ 提交于 2019-11-30 04:20:29
《构建之法》第二次博客 熟悉工具 一、作业要求 GIT地址 GIT地址 GIt用户名 Cherish599 学号后五位 62322 我的博客地址 博客 二、项目背景 阿超家里的孩子上小学一年级了,这个暑假老师给家长们布置了一个作业:家长每天要给孩子出一些合理的,但要有些难度的四则运算题目,并且家长要对孩子的作业打分记录。 作为程序员的阿超心想,既然每天都需要出题,那何不做一个可以自动生成小学四则运算题目与解决题目的命令行 “软件”呢。他把老师的话翻译一下,就形成了这个软件的需求: 程序接收一个命令行参数 n,然后随机产生 n 道加减乘除(分别使用符号+-*/来表示)练习题,每个数字在 0 和 100 之间,运算符在 2 个 到 3 个之间。 由于阿超的孩子才上一年级,并不知道分数。所以软件所出的练习题在运算过程中不得出现非整数,比如不能出现 3÷5+2=2.6 这样的算式。 练习题生成好后,将生成的 n 道练习题及其对应的正确答案输出到一个文件 subject.txt 中。 当程序接收的参数为4时,以下为一个输出文件示例。 13+17-1=29 11*15-5=160 3+10+4-16=1 15÷5+3-2=4 三、环境配置 Visual Studio 2013是我大一的时候就安装好的,版本不是很高,但是觉得再安装一个Visual Studio 2017或者Visual

勾股定理

前提是你 提交于 2019-11-29 19:31:35
题目描述 给出直角三角形其中一条边的长度n,你的任务是构造剩下的两条边,使这三条边能构成一个直角三角形。 输入描述: 一个整数n。 输出描述: 另外两条边b,c。答案不唯一,只要输出任意一组即为合理,如果无法构造请输出-1。 示例1 输入 复制 3 输出 复制 4 5 示例2 输入 复制 4 输出 复制 3 5 备注: 0<=n<=1e9 1<=b,c<=1e18 n,b,c均为整数 做题思路: 对小范围数据进行打表,即可发现存在以下规律: 1.当n>2时总有方法可以构造 2.当n是奇数总存在两条边b,c使得c-b 1并且n 2+b 2=c^2 3.当n是偶数总存在两条边b,c使得c-b 2并且n 2+b 2=c^2 因此我们可以设边c=x,分n是奇数和偶数的情况,有 1.n是奇数,b=x-1->n 2+(x-1) 2=x 2->x=(n 2+1)/2 2.n是偶数,b=x-2->n 2+(x-2) 2=x 2->x=(n 2+4)/4 于是可以O(1)求出答案 标程: # include <bits/stdc++.h> using namespace std ; int main ( ) { long long n , c ; while ( ~ scanf ( "%lld" , & n ) ) { assert ( n >= 0 && n <= 1e9 ) ; if ( n <

20194629 自动生成四则运算题第一版报告

一笑奈何 提交于 2019-11-29 16:17:10
   一、需求分析   (1)自动生成10道100以内的2个操作数的四则运算算式(+ - * /),要求运算结果也在100以内 (2)剔除重复算式, 2 + 3 = 和 2 + 3 = 是重复算式 2 + 3 = 和 3 + 2 = 不属于重复算式 (3)题目数量可定制 (4)相关参数可控制 是否包含乘法和除法 操作数数值范围可控(如操作数 在100以内 还是1000以内) 操作数是否含负数     (5)生成的运算题存储到外部文件result.txt中 二、功能设计    基本功能:自动生成四则运算试题   扩展功能:(1)算出答案        (3)用户可以自己选择用加减,乘除,正负 三、设计实现 Java语言实现,软件myeclipse,其中随机生成数字需使用到Math.random()函数,并通过for,switch等控制语句实现条件的各种选择问题。 四、测试运行    1.包含加减,不含乘除,不含正负,两个操作数,选择操作数范围和题目数量并去掉重复的功能    2.包含加减乘除,不含正负,两个操作数,选择操作数范围和题目数量并去掉重复的功能   3.包含加减、正负,两个操作数,选择操作数范围和题目数量并去掉重复的功能   4.包含加减、乘除、正负,两个操作数,选择操作数范围和题目数量并去掉重复的功能   五、代码片段 1.所需要引用的Java包 1   import

【数据结构】二叉树节点总数与度数,边数的关系

一个人想着一个人 提交于 2019-11-29 10:14:40
我们设度为0,1,2的节点分别为n0,n1,n2个,那么节点总数n=n0+n1+n2,然而边数b=n-1(除去最顶上的节点),并且b=n1+2*n2=n-1=n0+n1+n2-1,由此我们可以推出n0=n2+1 也就是说叶子节点要比度为二的节点多一个。 b=n1+2*n2 度为2的节点有两条边,度为1的节点有1条 结点总数=度数*该度数对应的结点数+1 n=n2 *2+n1 *1+0 *n0+1 因为度为2的节点连接两个节点,度为1的节点连接一个节点,最后加1个最顶端的根节点就行 总结 节点总数n=n0+n1+n2 边数等于b=n-1=n1+2* n2 由1,2推出 n0=n2+1 来源: https://blog.csdn.net/u011035397/article/details/100776503

A1算法性能评价

佐手、 提交于 2019-11-29 00:36:48
文章目录 写在前面的话 算法性能评价 几种常见时间复杂度对比 写在前面的话 文档没有任何商业因素,本着共享的精神进行分享,如有素材侵权,请给我留言; 文档都是自己平时看书或工作中的笔记,观点错误的地方欢迎留言; 算法性能评价 评价算法的性能主要从两个方面进行评价:时间复杂度和空间规模,记录的方式通常用大 O 标记法; 时间复杂度:指算法在最糟糕情况下的操作数量(一条语句作为一个操作单位),间接反应算法的运行时间; 空间规模:算法执行过程中所需要的最大空间需求;算法执行期间所需要的存储空间一般包含: 输入数据所占的空间;如果输入数据规模与问题相关,则不计入空间规模计算; 程序本身所占的空间;代码空间对不同算法来说一般相差不大,和算法无关; 辅助变量所占的空间; 举个例子来求解时间复杂度和空间规模: 例子1:求解 n 阶矩阵相乘的结果 // 计算 n 阶级矩阵的乘积:算法语句 for(int i = 0; i < n; i++) { // 执行 n+1 次 for(int j = 0; j < n ; j++) { // 执行 n*(n+1) 次 c[i][j] = 0; // 执行 n^2 次 for(int k = 0; k < n; k++) // 执行 n^2(n+1)次 c[i][j] = a[i][k]*b[k][j]; // 执行 n^3 次 } } 计算时间复杂度: