求第m个到第n个素数之间的素数和,求帮忙看下哪里错了 提取数组求和的时候总是在数组中出现0

求第m个到第n个素数之间的素数和,求帮忙看下哪里错了   提取数组求和的时候总是在数组中出现0

问题描述:

public class All {
public static void main(String[] args) {
int a[] = new int[200];
//将前200个数中的素数提取出来放入数组a中
for(int i = 1 ; i < 200 ; i ++){
boolean isPrime = true;
for(int k = 2 ; k < i ; k ++){
if( i % k == 0){
isPrime = false;
break ;
}
}
if(isPrime){
a[i-1] = i;
System.out.println(a[i-1]); //打印确认
}
}

    //  输入两个数 m,n  求第m个素数到底n个素数之间的素数和
    Scanner small = new Scanner(System.in);
    Scanner large = new Scanner(System.in);
    int m = small.nextInt();
    int n = large.nextInt();
    int sums = 0 ;
    int suml = 0;
    int sum = 0;
    for(int i = 0 ; i < m ; i ++){
        sums += a[i];
        System.out.print(a[i]+"*");
    }
    for(int i = 0 ; i < n ; i ++){
        suml += a[i];
        System.out.print(a[i]+" ");
    }
    sum = suml - sums;
    System.out.println(sum);
}

}

加个变量控制一下就行了。

public class All {
    public static void main(String[] args) {
        int a[] = new int[200];
        int index = 0;
        // 将前200个数中的素数提取出来放入数组a中
        for (int i = 1; i < 200; i++) {
            boolean isPrime = true;
            for (int k = 2; k < i; k++) {
                if (i % k == 0) {
                    isPrime = false;
                    break;
                }
            }
            if (isPrime) {
                a[index++] = i;
                System.out.println(a[index-1]); // 打印确认
            }
        }
        // 输入两个数 m,n 求第m个素数到底n个素数之间的素数和
        Scanner small = new Scanner(System.in);
        Scanner large = new Scanner(System.in);
        int m = small.nextInt();
        int n = large.nextInt();
        int sums = 0;
        int suml = 0;
        int sum = 0;
        for (int i = 0; i < m; i++) {
            sums += a[i];
            System.out.print(a[i] + "*");
        }
        for (int i = 0; i < n; i++) {
            suml += a[i];
            System.out.print(a[i] + " ");
        }
        sum = suml - sums;
        System.out.println(sum);
    }
}

你这个是因为你的素数都放到数组里面了,不是素数的为0,而你取值的时候是没有考虑0的。你取得值有可能是0.

出现0不正常吗,

 if(isPrime){//这里只有符合条件的才更新数组a
a[i-1] = i;//所以如果i是198是偶数,那a[197]就是0

当然,你写的代码效率就先不说,答案应该没问题。