初学者我的方法有什么问题

时间:2015-07-29 02:30:53

标签: java methods

public class assignment6part3 {

    public static void main(String[] args) {
        int q = 0;
        for ( int count=1; count <= 10000; count++) {
            if (Prime(count)) {
                q = q + 1;

            } 
        }
        System.out.println("It comes out " + q + " times.");
    }


    public static boolean Prime(int n) {
        if (n <= 1) {
            return false;
        }
        for (int i = 1; i < Math.sqrt(n); i++) {
            if (n % i == 0) {
                return false;
            }
        }
        return true;
    }
}

我试图获得0到10000之间的素数,但是当我运行它时,它说有0个素数。代码的哪一部分导致了这个错误?

2 个答案:

答案 0 :(得分:2)

在您的函数Prime内,您的for循环运行:: for(int i = 1; i < Math.sqrt(n); i++),从i = 1开始,每个数字都可以被1整除,因此可以归0个素数。:P

i的初始化条件应为i = 2

您可能会考虑更改的其他内容::

for (int i = 1; i < Math.sqrt(n); i++)应改为

for (int i = 1; i <= Math.sqrt(n); i++)

注意::查找Primes的更佳方式是https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes

答案 1 :(得分:1)

代码在实际检查数字之前返回false,因为每个数字都可以被1整除。此外,在某些情况下,如25和49,因子不小于平方根。试试这个:

for (int i = 2; i <= Math.sqrt(n); i++) {
    if (n % i == 0) {
        return false;
    }
}