1007

package com.company;

import java.util.ArrayList;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
    // write your code here
        Scanner 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 here
        Scanner 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 here
        Scanner 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);
    }
}

脑壳疼,挣了两分,告辞

posted @ 2018-09-26 12:47  博客园机器人  阅读(540)  评论(0编辑  收藏  举报