2022天梯赛模拟赛 均是素数 (20 分) python java

在给定的区间 [m,n] 内,是否存在素数 p、q、r(p

输入格式:

输入给出区间的两个端点 0

输出格式:

在一行中输出满足条件的素数三元组的个数。

输入样例:

1 35

输出样例:

10

样例解读

满足条件的 10 组解为:

2, 3, 5
2, 3, 7
2, 3, 13
2, 3, 17
2, 5, 7
2, 5, 13
2, 5, 19
2, 5, 31
2, 7, 23
2, 13, 17

 java代码

import java.util.Scanner;

public class Main {
	public static void main(String args[]) {
		Scanner scanner=new Scanner(System.in);
		int n=scanner.nextInt();
		int m=scanner.nextInt();
		int count=0;
		for(int i=n;i<=m;i++) {
			if(pd1(i)) {
				for(int j=i+1;j<=m;j++) {
					if(pd1(j)) {
						for(int k=j+1;k<=m;k++) {
							if(pd1(k))
								if(pd2(i, j, k))
									count++;
						}
					}
				}
			}
		}
		System.out.println(count);
	}
	public static boolean pd1(int n) {//判断目标是否为素数
		if(n==1)
			return false;
		else {
			for(int i=2;i<=(int)Math.sqrt(n);i++) {
				if(n%i==0)
					return false;
			}
		}
		return true;
	}
	
	public static boolean pd2(int p,int q,int r) {
		int m=p*q+r;
		int n=p*r+q;
		int k=q*r+p;
		if(pd1(m)&&pd1(n)&&pd1(k))
			return true;
		return false;
	}
}

python代码

import math as ma
def pd1(n):#//判断目标是否为素数
    if n==1:
        return False;
    else:
        flag = True
        for i in range(2,int(ma.sqrt(n))+1):
            if n%i==0:
                flag=False
        if flag:
            return True

def pd2(p,q,r):
    m=p*q+r
    n=p*r+q
    k=q*r+p
    if pd1(m) and pd1(n) and pd1(k):
        return True
    else:
        return False

z = input().split()
n = int(z[0])
m = int(z[1])
k = []
if n==1:
    n+=1
for i in range(n,m+1):
    if pd1(i):
        k.append(i)
s = 0
for i in k:
    for j in k[k.index(i)+1::]:
        for z in k[k.index(j)+1::]:
            if pd2(i,j,z):
                s+=1
print(s)

 python超时严重,只有13分

2022天梯赛模拟赛 均是素数 (20 分) python java_第1张图片

 

你可能感兴趣的:(天梯赛,python,java)