在Java中使用IsPrime方法

时间:2016-02-01 03:59:55

标签: java

这是我的代码,使用IsPrime方法确定0到1000之间的素数总数,并打印最后的素数总数。任何人都可以说出代码的错误。

public static void main(String[] args) {
    int z=0; 
    // z is the variable that holds total number of primes
    //n is divisor
    //i is dividend

    if (isPrime(i)) {
        z++;
    }
    System.out.print(z+"\n");
}

public static boolean isPrime(int n){
             { 
    for(i=0; i<1000; i++)
    {
        for(n=0; n<i; n++)
            if(i%n==0) 
                return false;
            else 
                return true;
        }
    }
}

提前致谢

5 个答案:

答案 0 :(得分:2)

格式化它可能有助于您发现错误。

我发现您的代码存在一些错误:

  1. 从我所看到的情况来看,您的isPrime方法中有一个额外的开放式花括号。
  2. i未在您的主要方法中声明。
  3. 您需要将if(isPrime(i))语句包含在从0到1000的for循环中。如下所示:

    for (int i = 0; i <= 1000; i++) {
        if (isPrime(i))
            z++;
    }
    

    这样,它实际上会检查0到1000之间的所有素数

  4. 对于良好的编码实践,我会将您的z变量命名为counter,以便明确该变量应该执行的操作。 for循环中的i是可以的,因为这是循环索引的常用方法。
  5. 您还可以使用多种策略来优化代码。你可以使用Math.sqrt()函数,从3开始你的for循环,然后以2的增量递增(因为任何偶数都可以被2分割)并从1初始化你的计数器,因为2已经是素数号。

答案 1 :(得分:0)

我认为你有一些转变。

为什么不在主函数中从1循环到1000然后使用isPrime函数来确定每个数字是否为素数。

在isPrime函数中,您将数字的值从2到1/2计数,并进行除法以确定它是否为素数。如果可以整数则返回False。

public static void main(String[] args) {
  int z=0; 
  for (i=1;i<=1000;i++) {
       if (isPrime(i))
       {
           z++;
       }
    }
    System.out.print(z+"\n");
}
public static boolean isPrime(int n){
        for(i=2; i<=n/2; i++)
        {
           if(n%i==0) return false;
        }
        return true;
}

答案 2 :(得分:0)

public static boolean isPrime(int n){
    int factors = 0;
    for(i=1; i<=n; i++){
        if(n%i==0) // ensure that you mod n not i
        factors++;
     }
    // if factors count is equals to 2 then it is prime number else it's not prime number
    if(factors == 2)
        return true;
    else
        return false;
    }
}

检查此修改后的代码一次,以供参考。

答案 3 :(得分:-1)

这将根据此link和您的原始答案计算素数...

public static void main(String[] args) {
    int isPrimeCount = 0;

    for(i=0; i<1000; i++)
    {
        if(Check_Prime(i))
        {
          isPrimeCount++;
        }
        System.out.println(isPrimeCount);
    }
}

private static boolean Check_Prime(int number) {
    int i;
    for (i = 2; i <= number - 1; i++)
    {
        if (number % i == 0)
        {
           return false;
        }
    }
    if (i == number)
    {
        return true;
    }
    return false;
}    

答案 4 :(得分:-1)

您需要定义变量&#34; i&#34;在将它传递给main()中的isPrime()方法之前。似乎编写代码的人并没有完全理解素数是什么。根据维基百科&#34;素数(或素数)是一个大于1的自然数,除了1和它本身之外没有正除数。 &#34;考虑到这一点,您需要确保传递给isPrime()方法的值大于1.查看代码后我做了一些更改。如果输入值是&lt; = 1,我使isPrime()方法返回false。此外,如果输入值为2,我使isPrime()方法返回true。我在代码中进行了其他更改,这将使for语句运行n-1次,因为这是查找数字是否所需的全部内容因为所有数字都可以自行整除。 for语句也从值2开始.for循环中的if-then-else返回语句是不合逻辑的,因为它将返回一个值而不经过整个循环。你不需要内循环。
这是a link on prime numbers

这是新代码:

width