我得到了一个TLE,用于在java中打印给定2个数字(含)之间所有素数的总和
`我得到了一个TLE,用于在java中打印给定2个数字(含)之间所有素数的总和,java,Java,` import java.io.*; 导入java.util.*; 类TestClass{ 公共静态长素数(长l,长r){ 布尔标志=假; 长计数=0; 长i,j; 对于(i=l;i=2){ 对于(j=2;j0){ StringTokenizer s=新的StringTokenizer(br.readLine()); long l=long.parseLong(s.nextToken()); long r=long.parseLong(s.nextToken()); res[i]=素数(l,r
import java.io.*;
导入java.util.*;
类TestClass{
公共静态长素数(长l,长r){
布尔标志=假;
长计数=0;
长i,j;
对于(i=l;i=2){
对于(j=2;j0){
StringTokenizer s=新的StringTokenizer(br.readLine());
long l=long.parseLong(s.nextToken());
long r=long.parseLong(s.nextToken());
res[i]=素数(l,r);
t--;
i++;
}
对于(i=0;i拆分代码,消除不必要的变量。对于素数,只需重复到sqrt(n):
导入java.io.BufferedReader;
导入java.io.IOException;
导入java.io.InputStreamReader;
类TestClass{
公共静态长素数(长l,长r){
长计数=0;
谢谢你的回答。
import java.io.*;
import java.util.*;
class TestClass {
public static long prime(long l,long r){
boolean flag=false;
long count=0;
long i,j;
for(i=l;i<=r;i++){
flag=false;
if(i>=2){
for(j=2;j<i;j++){
if(i%j==0){
flag=true;
break;
}
}
if(flag==false){
count+=i;
}
}
}
return count;
}
public static void main(String args[] ) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int t=Integer.parseInt(br.readLine());
int i=0;
int x=t;
long res[]=new long[t];
while(t>0){
StringTokenizer s=new StringTokenizer(br.readLine());
long l=Long.parseLong(s.nextToken());
long r=Long.parseLong(s.nextToken());
res[i]=prime(l,r);
t--;
i++;
}
for(i=0;i<x;i++){
System.out.println(res[i]);
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
class TestClass {
public static long sumPrime(long l, long r) {
long count = 0;
for (long n = l; n <= r; n++) {
if (isPrime(n)) count += n;
}
return count;
}
public static boolean isPrime(long n) {
if (n < 2) return false;
if (n == 2) return true;
for (long i = 2; i <= (long) Math.sqrt(n); i++) {
if (n % i == 0) return false;
}
return true;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Loop: ");
int t = Integer.parseInt(br.readLine());
long[] res = new long[t];
for (int i = 0; i < t; i++) {
System.out.print("(l-r)?: ");
String[] s = br.readLine().split(" ");
long l = Long.parseLong(s[0]);
long r = Long.parseLong(s[1]);
res[i] = sumPrime(l, r);
}
System.out.print("Result: ");
for (int i = 0; i < t; i++) {
System.out.printf("%d ", res[i]);
}
}
}