PAT(乙级)素数对猜想python
2021/7/9 22:16:32
本文主要是介绍PAT(乙级)素数对猜想python,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
题目
“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。现给定任意正整数N(<10**5
),请计算不超过N的满足猜想的素数对的个数。
输入格式:
输入在一行给出正整数N。
输出格式:
在一行中输出不超过N的满足猜想的素数对的个数。
输入样例:
20
输出样例:
4
代码:
import math n=int(input()) def panduan(n): flag=True if (n==1)|(n==2): flag=True else: for i in range(3,int(math.sqrt(n))+1,2): if n % i==0: flag=False return flag def sulist(n): slist=[1,2] for i in range(3,n+1,2): if panduan(i): slist.append(i) return slist def duinum(x): count=0 for i in range(len(x)-1): if x[i+1]-x[i]==2: count+=1 return count print(duinum(sulist(n)))
解题思路:
1.先写一个函数判断这个数是否为素数。
2.在利用一个循环遍历,将1~N中间的质数均存在一个列表里slist
3.在写一个for循环来判断相邻两个质数之间的差是否为2,输出对数。
这个代码运行也正确,但是运行会超时。
方法二:
n=int(input()) def prime(n): slist=[1] flag = [1]*(n+2) p=2 while(p<=n): slist.append(p) for i in range(2*p,n+1,p): flag[i] = 0 while 1: p += 1 if(flag[p]==1): break return slist def duinum(x): count=0 for i in range(len(x)-1): if x[i+1]-x[i]==2: count+=1 return count print(duinum(prime(n)))
这个方法好,因为以2*P开始,至N遍历结束,所以这个序列的第N+1位置很可能是0,所以要有n+2个[1]来跳出循环。这个判断素数的方法大大提高了运算速度。
知识点一:求根号n
>>> import math >>> math.sqrt(4) 2.0 >>>
知识点二:一个整数乘以一个列表并不是各个元素相乘
>>> [1,2,3,4]*2 [1, 2, 3, 4, 1, 2, 3, 4] >>>
这篇关于PAT(乙级)素数对猜想python的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-25Python编程基础:变量与类型
- 2024-11-25Python编程基础与实践
- 2024-11-24Python编程基础详解
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器