package com.company;import java.util.ArrayList; import java.util.Scanner;public class Main {public static void main(String[] args) {// write your code hereScanner sc=new Scanner(System.in);int N=sc.nextInt();int[] num=new int[N];//N以内的所有数int i;ArrayList sushu=new ArrayList();sushu.add(2);//将N以内所有数存入数组,获取素数,并存入sushu中for (i=0;i<N;i++){num[i]=i+1;if (num[i]>2){for (int j=2;j<num[i]-1;j++) {if (num[i] % j != 0) {}else {break;}if (j==num[i]-1){sushu.add(num[i]);}}}}int count=0;for (int k=1;k<sushu.size();k++){if(Integer.parseInt(sushu.get(k).toString())-Integer.parseInt(sushu.get(k-1).toString())==2){count++;}}System.out.println(count);} }
提示超时扣两分,这就很难受,难道还要优化?
package com.company;import java.util.ArrayList;import java.util.Scanner;public class Main {public static void main(String[] args) {// write your code hereScanner sc=new Scanner(System.in);int N=sc.nextInt();int[] num=new int[N];//N以内的所有数int i;ArrayList sushu=new ArrayList();sushu.add(2);sushu.add(3);//将N以内所有数存入数组,获取素数,并存入sushu中for (i=0;i<N;i++){num[i]=i+1;if (num[i]>2){for (int j=2;j<=Math.sqrt(num[i]);j++) {if (num[i] % j != 0) {}else {break;}if (j==(int)Math.sqrt(num[i])){sushu.add(num[i]);}}}}int count=0;for (int k=1;k<sushu.size();k++){if(Integer.parseInt(sushu.get(k).toString())-Integer.parseInt(sushu.get(k-1).toString())==2){count++;}}System.out.println(count);} }
内循环结束条件改成j<=Math.sqrt(num[i]),并没有改变超时的情况。
package com.company;import java.util.ArrayList; import java.util.Scanner;public class Main {public static void main(String[] args) {// write your code hereScanner sc = new Scanner(System.in);int N = sc.nextInt();int i, j, k = 0;int q = 1;int number = 0;int flag = 1;int[] A = new int[N];int[] B = new int[N];B[0]=2;for (i = 3; i <= N; i++) {A[k++] = i;}for (int m = 0; m < k; m++) {for (j = 2; j <= Math.sqrt(A[m]); j++) {if (A[m] % j == 0) {flag = 0;break;} else {flag = 1;}}if (flag == 1) {B[q++] = A[m];flag = 1;}}for (i = 0; i<q-1; i++){if (B[i + 1] - B[i] == 2) {number++;}}System.out.println(number);} }
脑壳疼,挣了两分,告辞