计算素数(新手)

时间:2015-09-25 16:04:40

标签: java loops primes

该程序检查用户的输入号码是否为素数。

我的问题出在if声明中。出于某种原因,Boolean永远不会被切换。如果数字是素数,它将只给出两个结果。

我错过了什么?

import java.util.Scanner;
public class Prime 
{

     public static void main(String[] args)
    {
       System.out.println("Enter a number to check if it is prime:");
       Scanner kb = new Scanner(System.in);
       int n = kb.nextInt();
       boolean more = true;

       do
       {
           for (int i = 2; i <= n; i++)
           {
               if (n <=1 || n%i==0) 
               {
                    System.out.println(n + " is not prime");
                    more = false;
               }              
            } 
       }
       while (more);
       System.out.println(n + " is prime");
    }
}

7 个答案:

答案 0 :(得分:2)

删除if()内的打印件,并在do while循环后使用以下代码

if(more)
 System.out.println(n + " is prime");
else
 System.out.println(n + " is not prime");

并且您也不需要执行while while循环删除它。完整代码

 System.out.println("Enter a number to check if it is prime:");
 Scanner kb = new Scanner(System. in );
 int n = kb.nextInt();
 boolean more = true;


 for (int i = 2; i <= n / 2; i++) {
    if (n <= 1 || n % i == 0) {

        more = false;
        break;
    }
 }
 if (more) System.out.println(n + " is prime");
 else System.out.println(n + " is not prime");

Demo

答案 1 :(得分:2)

可以使用for循环检查少数行的素数。它的表现更好。

检查素数的代码:

    boolean isPrime = true;
    for (int i = 2; i < n && isPrime; i++) {
        isPrime = !(n % i == 0);
    }

根据您的示例完整课程:

import java.util.Scanner;

public class Prime {

    public static void main(String[] args) {
        System.out.println("Enter a number to check if it is prime:");
        Scanner kb = new Scanner(System.in);
        int n = kb.nextInt();

        boolean isPrime = true;
        for (int i = 2; i < n && isPrime; i++) {
            isPrime = !(n % i == 0);
        }

        System.out.println(n + " is prime - " + isPrime);
    }
}

答案 2 :(得分:1)

试试这个:

public static void main(String[] args) {
        System.out.println("Enter a number to check if it is prime:");
           Scanner kb = new Scanner(System.in);
           int n = kb.nextInt();
           boolean prime = true;

               for (int i = 2; i <n; i++)
               {
                   if (n <=1 || n%i==0) 
                   {
                        prime = false;
                        break;
                   }
                }
               if(prime)
               {
                   System.out.println(n + " is prime");
               }
               else
               {
                   System.out.println("Not prime");
               }
    }

答案 3 :(得分:1)

以下逻辑正在发挥作用。请试试这个。

int count=0; 
for(i=2;i<=n/2;++i)
{
  if(n%i==0)
  {
      count=1;
      break;
  }
}
if (count==0)
  System.out.println(i+" is a prime number.");
else
  System.out.println(i+" is not a prime number.");

如果计数增加,给定的数字可以被其他一些数字整除。否则它应该是素数。

谢谢...

答案 4 :(得分:1)

您不需要一直检查到n,直到平方根。如果你之前计算过,那么你的循环应该减少迭代并且更快。

答案 5 :(得分:1)

使用简单的for循环尝试此代码。

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

答案 6 :(得分:-2)

试试这个:

System.out.println("Enter a number to check if it is prime:");
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
boolean isPrime = true;

if (n < 1)
    isPrime = false;
else
    for(int i = 2; 2 * i < n; i++) {
        if (n % i == 0) {
            isPrime = false;
            break;
        }  
    }

System.out.println( n + " is " + (isPrime? "" : "not ") + "prime");