素数

python3之1007.素数对猜想 (20分)

不想你离开。 提交于 2019-12-06 23:31:17
题目赘述如下: 让我们定义 dn 为:dn = pn+1 - pn,其中 pi 是第i个素数。显然有 d1=1 且对于n>1有 dn 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。 现给定任意正整数N (< 10^5),请计算不超过N的满足猜想的素数对的个数。 输入格式: 每个测试输入包含1个测试用例,给出正整数N。 输出格式: 每个测试用例的输出占一行,不超过N的满足猜想的素数对的个数。 输入样例: 20 输出样例: 4 题目解析: 题目仍然是不难理解,也不难写,素数的判断是编程基本功,然后判断i和i+2是否是素数对。 本题争议最大的地方乃最后一个测试点,暴力求解往往超时,需要简要优化算法,如下代码测试最后一个测试点用时222ms,效果还不错,可堪重用。 import math def sushu(num): # 判断素数的函数,注意传入的num已经全是奇数了,故从3开始判断每个奇数是否是因数 for i in range(3,int(math.sqrt(num))+1,2): if num % i == 0: return False return True if __name__ == '__main__': n = int(input()) con = 0 # 素数对计数 f1 = sushu(3) # f1和f2存入相邻两个数字的素数状态

1007 素数对猜想 Python实现

你说的曾经没有我的故事 提交于 2019-12-06 23:30:47
1007 素数对猜想(20 分) 让我们定义d​n​​为:d​n​​=p​n+1​​−p​n​​,其中p​i​​是第i个素数。显然有d​1​​=1,且对于n>1有d​n​​是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。 现给定任意正整数 N (<10​5​​),请计算不超过 N 的满足猜想的素数对的个数。 输入格式: 输入在一行给出正整数 N 。 输出格式: 在一行中输出不超过 N 的满足猜想的素数对的个数。 输入样例: 20 输出样例: 4 问题分析: 解题思路很简单,找出n以内的素数,再寻找相邻且差为二的素数对 在实现的过程中,遇到一个十分麻烦的问题,算法超出时间限制,优化方向当然是素数判断算法的优化。所以之后会着重讲解素数判断算法的优化(需要代码的同学直接拉到最后)。 素数判断算法一: 直接利用素数定义编写的算法: def prime(a): if a<=1: return False for i in range(2,a-1): if a%i==0: return False return True 利用该算法输出100000(十万)以内素数,程序以及运行时间如下: 程序: import time def prime(a): if a<=1: return False for i in range(2,a-1): if a%i==0: return

1007. 素数对猜想 (20) python篇

半世苍凉 提交于 2019-12-06 23:30:32
1007. 素数对猜想 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 让我们定义 d n 为:d n = p n+1 - p n ,其中 p i 是第i个素数。显然有 d 1 =1 且对于n>1有 d n 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。 现给定任意正整数N (< 10 5 ),请计算不超过N的满足猜想的素数对的个数。 输入格式: 每个测试输入包含1个测试用例,给出正整数N。 输出格式: 每个测试用例的输出占一行,不超过N的满足猜想的素数对的个数。 输入样例: 20 输出样例: 4 n=input() b=[] c=0 for x in range(2,int(n)+1): a=1 i=2 while i*i<=x: if x%i==0: a=0 break i+=1 if a==1: b.append(x) for i in range(len(b)-1): if b[i+1]-b[i]==2: c+=1 print(c) 最后一个测试点超时,求大神改进算法!!! 改进代码(偶尔超时): import math def prime(n): if n%2==0 and n!=2: return False for i in range(2,int(math

PAT 1007 素数对猜想 python

二次信任 提交于 2019-12-06 23:30:16
1007 素数对猜想(20 分) 让我们定义d​n​​ 为:d​ n ​​ = p ​n+1 ​​ −p​ n ​​ ,其中p i​​ 是第i个素数。显然有d ​1 ​​ =1,且对于n>1有d​ n​​ 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。 现给定任意正整数N(<10​ 5​​ ),请计算不超过N的满足猜想的素数对的个数。 输入格式: 输入在一行给出正整数N。 输出格式: 在一行中输出不超过N的满足猜想的素数对的个数。 输入样例: 20 输出样例: 4 作者: CHEN, Yue 单位: 浙江大学 时间限制: 200ms 内存限制: 64MB 代码长度限制: 16KB 问题分析: 所谓素数对,就是两个差为2的素数 本体最关键的,在于对于素数算法的优化 由于题目有时间限制,若是使用常规的素数算法,则会造成计算超时 于是乎,换了一种素数筛选方法(具体叫什么我不记得了╮(╯▽╰)╭) 大体原理是这样的: 从2开始,将所有2的倍数标记为0,并将2加入素数列表 向后依次取标记为1的数(2之后应取3),并将所有取到数的所有 倍数 标记为0 将所有标记为1的数加入素数列表 这样筛选可以大大较少筛选时间 代码: def prime (n, result) : flag = [ 1 ] * (n + 2 ) p = 2 while (p <= n): result

C语言I作业11

不羁的心 提交于 2019-12-06 17:15:21
问题 答案 这个作业属于哪个课程 c语言设计1 这个作业要求在哪 https://edu.cnblogs.com/campus/zswxy/CST2019-3/homework/10097 我在这个课程的目标是 熟悉编译器的操作 这个作业在哪个具体方面帮助我实现目标 基本语言和格式 参考文献 《提问的智慧》 《PTA系统常见问题解答》 1.PTA实验作业(20分/题) 形如2 ​n ​​ −1的素数称为梅森数(Mersenne Number)。例如2 ​2 ​​ −1=3、2 ​3 ​​ −1=7都是梅森数。1722年,双目失明的瑞士数学大师欧拉证明了2 ​31 ​​ −1=2147483647是一个素数,堪称当时世界上“已知最大素数”的一个记录。 本题要求编写程序,对任一正整数n(n<20),输出所有不超过2 ​n ​​ −1的梅森数。 1.1.1数据处理 数据表达:用了变量n表示正整数表示循环判断条件p表示梅森数。 数据处理:用到了for循环结构。 1.1.2实验代码截图 1.1.3 造测试数据 输入数据 输出数据 说明 5 3 7 31 无 6 3 7 31 无 7 3 7 31 127 无 8 3 7 31 127 无 1.1.4 PTA提交列表及说明 答案错误:没有输出空格,导致错误。 1.2 题目2 本题要求编写程序,输出n行由大写字母A开始构成的三角形字符阵列。 1

C语言I博客作业11

强颜欢笑 提交于 2019-12-06 16:34:52
问题 回答 这个作业属于哪个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-2/homework/10096 我在这个课程的目标是 掌握并熟悉C语言的运用 这个作业在哪个具体方面帮助我实现目标 嵌套循环的运用 参考文献 《C primer Plus》《C语言程序设计》《CSDN》《百度》 1. PTA实验作业 1.1 输出三角形字符阵列 题目内容 本题要求编写程序,输出n行由大写字母A开始构成的三角形字符阵列。 输入格式: 输入在一行中给出一个正整数n(1≤n<7)。 输出格式: 输出n行由大写字母A开始构成的三角形字符阵列。格式见输出样例,其中每个字母后面都有一个空格。 1.1.1 数据处理 数据表达:定义整型变量n,b,c,字符型变量a='A',其中n表示行数,b,c表示循环变量,a表示每列每行的字母 数据处理:输入n表示有n行数,从第一行n列开始,每下一行依次递减直到最后n行只有一列,用两个for循环,第一个for循环得出行数,第二个for循环得出列数,从字母A开始一个一个的输出,列循环累加时,字符型变量字母累加然后输出,每一行输完跳出中间第二个for循环,以换行跳回第一个for循环 伪代码: 1.1.2 实验代码截图 1.1.3 造测试数据 输入数据 输出数据 说明 4 A B C D

C语言I博客作业11

馋奶兔 提交于 2019-12-06 14:54:17
这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 C语言I作业10 我在这个课程的目标是 学会使用函数,熟练函数类型 这个作业在那个具体方面帮助我实现目标 在PTA的练习中逐渐熟练语句用法,和对知识的自我总结上 参考文献 集美大学林丽老师 、 百度文库 、C语言程序设计 1.PTA实验作业 1.1 题目名1 输出三角形字符阵列 1.1.1数据处理 数据表达: 数据处理: 1.1.2实验代码截图 1.1.3 造测试数据 输入数据 输出数据 说明 3 输入的是3,组成的是三行三列的三角形 5 输入的是5,组成的为五行五列的 输入7,组成七行七列的三角型,不过字母不够 1.1.4 PTA提交列表及说明 * 答案错误: * 答案错误: 1.2题目名2 梅森数 1.2.1数据处理 *数据表达*: *数据处理*: 1.2.2实验代码截图 1.2.3 造测试数据 输入数据 输出数据 说明 7 在2^7-1内的素数只有3,7,31,127,8191 20 在2^20-1内的素数只有3,7,31,127,131071,524287 50 在2^50-1内的素数只有3,7,31,127,131071,524287,2147483647 1.2.4 PTA提交列表及说明 *编译错误: *部分正确: 1.3 题目名3 同构数 1.3.1数据处理 *数据表达*: *数据处理*: 1.3

Rabin算法

。_饼干妹妹 提交于 2019-12-06 06:49:47
中国剩余定理 如果已知 n 的素因子,那么就能够利用中国剩余定理求解方程组。用现代数学的语言来说明就是,中国剩余定理给出了以下的一元线性同余方程组有解的判定条件: 一般而言,如果 n 的素因子可以分解为: \[ n=p_1 * p_2 * ... * p_t \] 那么方程组: \[ (x \quad mod \quad p_i)=a_i \quad (i=1,2,...t) \] 有唯一解,这里 x<n ,就是说一个数被他的余数模这些素数唯一确定 例如,去两个素数2和5,与一个数字9,那么 9 mod 2=1 , 9 mod 5=4 ,则小于2*5=10且满足上式的只有9 所以能够得到如果对已任意的 a<p,b<q (p,q都是素数),那么,当 x<p*q 的时候,存在一个唯一的 x 使得: \[ x \equiv a(mod \quad p)\quad 且\quad x\equiv b(mod \quad q) \] 如何计算 x ? 首先通过 欧几里得算法 找到 u ,使得: \[ u * q \equiv 1(mod \quad p) \] 然后计算: \[ x=(((a-b) * u) mod \quad p)*q+b \] 推论: 如果 p 和 q 都是素数,且 p<q ,那么存在一个唯一的 x<p*q ,使得 \[ a \equiv x(mod \quad p)且b

统计两个整数之间有多少个素数

夙愿已清 提交于 2019-12-06 06:43:17
def demo(x): def inner(num): if num <= 2: #1,2都是素数 result = '是素数' else: num >2 #我们主要是判断>2的数 for i in range(2,num): if num%i == 0: result = 0 #在此判断为非素数 break elif num%i == 1: result = 1 #再此判断为素数 return x(result) return inner@demodef func(p): return pnum1 = int(input('请输入一个数字:\n'))num2 = int(input('请输入一个数字:\n'))a = 0b = 0for i in range(num1,num2+1): func(i) if func(i) == 0: a += 1 else: b += 1print('2到100中非素数有{}个'.format(a))print('2到100中素数有{}个'.format(b)) 来源: https://www.cnblogs.com/ldmb/p/11966217.html

C语言I博客作业10

久未见 提交于 2019-12-06 03:32:03
一、本周教学内容&目标 第4章 循环结构 4.5 综合介绍循环结构的程序设计,涉及到多个典型算法。要求学生能够根据实际情况,选择合适的算法、合理的循环结构,熟练的编写程序。 二、本周作业头 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://www.cnblogs.com/LiXue59/p/11936874.html 我在这个课程的目标是 复习循环语句嵌套 这个作业在哪个具体方面帮助我实现目标 PTA实验作业 参考文献 《C语言程序设计II》 1.PTA实验作业 1.1输出三角形字符阵列——本题要求编写程序,输出n行由大写字母A开始构成的三角形字符阵列。 1.1.2实验代码截图 1.1.3造测试数据 1.1.4PTA提交列表及说明 1.2 形如 2 ​ n ​​ − 1的素数称为梅森数(Mersenne Number)。例如 2 ​ 2 ​​ − 1 = 3、 2 ​ 3 ​​ − 1 = 7都是梅森数。1722年,双目失明的瑞士数学大师欧拉证明了 1是一个素数,堪称当时世界上“已知最大素数”的一个记录。 本题要求编写程序,对任一正整数 n( 0),输出所有不超过 2 ​ n ​​ − 1的梅森数。 输入格式: 输入在一行中给出正整数 n( 0)。 输出格式: 按从小到大的顺序输出所有不超过 2 ​ n ​​ − 1的梅森数,每行一个。如果完全没有