1007 素数对猜想 java版+python(有点小问题)

这篇博客讨论了一道PAT编程题,题目要求找出不超过给定整数N的所有相邻且差为2的素数对。博主首先介绍了素数对猜想,并提供了Java和Python两种语言的解题代码。尽管Python代码在某些在线平台上可能因运行时间过长导致超时,但博主鼓励读者分享更优的Python实现。
摘要由CSDN通过智能技术生成

我们来看看今天的pat题目

让我们定义dn​为:dn​=pn+1​−pn​,其中pi​是第i个素数。显然有d1​=1,且对于n>1有dn​是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。

现给定任意正整数N(<105),请计算不超过N的满足猜想的素数对的个数。

输入格式:

输入在一行给出正整数N

输出格式:

在一行中输出不超过N的满足猜想的素数对的个数。

输入样例:

20

输出样例:

4

可以看出: 题目的意思是,输入一个正整数n,求在1~n之间,相邻的素数的差为2,总共有几对。既然了解了题目的意思,那我们就知道该怎么做了:首先,是要知道1~n之间有那些数是素数,再看看那些相邻的素数差为2,然后统计下来。

因为我的python代码有点小问题,所有先看看java版

Java:

public class Main {
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		int num=sc.nextInt();
		ArrayList<Integer> list=new ArrayList<>();
		for(int i=3;i<=num;i++) {//开始判断从3到num之中那些是素数
			boolean judged=true;//开始假设i是素数			
			for(int j=2;j<=Math.sqrt(i);j++) {//减少运算时间

				if(i%j==0) {
					judged=false;
                    break;
				}				
			}
			if(judged) {
				list.add(i);//把素数加到列表里面
			}
		}
		int number=0;
		
		for(int i=0;i<list.size()-1;i++) {
			if(list.get(i+1)-list.get(i)==2) {//看看相邻两个数是不是素数对,统计
				number++;
			}
		}
		System.out.println(number);
	}
	
}

 再来看看python版,大家看看有什么问题

python:

import math

n=int(input())
list1=[]
i=3
while i<=n:
    judeged=True
    j=2
    while j <=int(math.sqrt(i)):
        if i%j==0:          
            judeged=False
            break
        j+=1
    if judeged: 
        list1.append(i)
    i+=1
        
num=0
for i in range(len(list1)-1):
    if list1[i+1]-list1[i]==2:
        num+=1
print(num)

乍一看是不是没有错误,对的,这个代码没有错,错的是这个世界(⓿_⓿),其实这个代码在pat上是有问题的,因为python写完程序,要提交到解释器上面去,解释器再进行翻译成机械语言。python为啥这么慢,很简单,它不知道数据类型,要先判断一下,java和c++都是先定义了的。

所有这次就java版能满分通过,python最后一项超时了,大家有好的python版可以给我说说

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜了再学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值