素数识别和平方

Prime number identification and squaring

我被要求为以下问题编写代码,

Find the prime numbers in an array of given numbers and print the sum of squares of the prime numbers found.

这是我的代码:

import java.util.*;

public class primenumber2
{
    public static void main(String[] args) 
    {
        int[] int1  = {2,3,4,6,11,13,17,99};

        int square=0;
        int result=0;

        boolean isprime = true;

        for(int i=0;i<int1.length;i++)
        {   
            int temp=int1[i];
            for(int j=1;j<i;j++)
            {

                if(temp%j==0)
                {
                    isprime = false;

                }
                else
                    isprime = true;


            }
            if(isprime)
                {   
                    System.out.println(temp);
                    square = temp*temp;
                    result = result+square; 
                }



        }

        System.out.println(result);
    }
}

现在的问题是每个以 9 结尾的数字都被添加为质数,我找不到原因。

有人可以帮我解决这个问题吗?还有,如果,可能是一种更好的方法来解决这个问题,只需使用基本功能和 类.

2 个问题

  • 你从 1 开始 for-loop
  • 你检查直到 j<i 这是第一个循环的索引。

for(int j=1;j<i;j++)
//           ↑ why limit this loop at index of the outer loop? 
//        ↑ start at 1 (WRONG!)

要检查质数,您必须从 number % 2 开始直到 number % number - 1

for(int j=2;j<temp;j++)

但为了阐明和保存迭代,我会创建一个方法来检查素数,如下所示:

private static boolean isPrime(int toCheck) {
    for (int i = 2; i < toCheck; i++) {
        // stop iterating if you know number is even
        if (toCheck % i == 0) return false;
    }
    return true;
}

然后你可以像这样使用它:

public static void main(String[] args) throws Exception {
    int[] int1 = { 2, 3, 4, 6, 11, 13, 17, 99 };

    int square = 0;
    int result = 0;

    for (int i = 0; i < int1.length; i++) {
        if (isPrime(int1[i])) {
            System.out.println(int1[i]);
            square = int1[i] * int1[i];
            result += square;
        }

    }

    System.out.println(result);
}

输出:

2
3
11
13
17
592

这似乎是正确的