如何做一个程序,确定一个数字是素数还是复合数

时间:2016-11-01 18:04:42

标签: java

我是使用Java的初学者。出于某种原因,我无法让我的程序正确地确定我输入的数字是素数还是复合数。有人能告诉我我做错了什么吗?

public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    boolean prime = true;

    System.out.println("Please enter a number");
    int num1 = in .nextInt();
    int numval = 1;
    for (int i = 2; i < num1; i = i + 1) {
        numval += 1;
        int test = num1;
    }
    if (num1 != 0) {
        System.out.println("This is a prime number");
        prime = false;

    }
    if (prime == true) {
        System.out.println("This is not a prime number");

    }
}

4 个答案:

答案 0 :(得分:0)

我不确定您尝试使用测试变量做什么,但尝试这样更清洁的事情。

boolean prime = true;
int num1 = in .nextInt();
// We know that composite numbers start from 2 and that 1 is neither prime nor composite.
if (num1 < 2) {
   throw new IllegalArgumentException("Number has to greater than 1");
}
for (int i = 2; i < num1; i++) {
    if (num % i == 0) {
        prime = false;
        break;
    }
}
if (prime) {
    System.out.print("Number is a prime");
} else {
    System.out.print("Number is composite");
}

答案 1 :(得分:0)

素数是只有两个因子为1的数字。因此,您必须检查是否有任何大于1且小于N的因子。因此,您必须编写一个从 2到N-1 的循环来检查是否可以除以 2到N-1 之间的任何数字。

如果可以从循环中获取任何因子,则将变量prime设为false并从循环中断,因为如果我们从循环中得到一个因子,则不必检查其他因子。

如果我们没有从循环中得到任何因子,那么prime的值将在我们之前初始化时为真。

public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    boolean prime = true;

    System.out.println("Please enter a number");
    int num1 = in .nextInt();

    if(num1<2)
    {
        System.out.println("Number should be greater than 1");
        return;
    }

    for (int i = 2; i < num1; i = i + 1) {
        if (num1 % i == 0) {
            prime = false;
            break;
        }
    }
    if (prime == true) {
        System.out.println("This is a prime number");

    }
    if (prime == false) {
        System.out.println("This is not a prime number");

    }
}

答案 2 :(得分:0)

  boolean prime = true;
    for (int i = 2; i * i <= num1; i = i + 1) {
      if (num1 % i == 0) {
        prime= false;
        break;
      }
    }
    if (prime && num1>1) {
      System.out.println("This is a prime number");
    }else {
      System.out.println("This is not a prime number");
    }

答案 3 :(得分:-1)

我知道两种方式: 让我们记住数字&#39;使用。

1:((编号%2)== 0)
2:((数字&amp; 1)== 0)

我相信,对于任何素数都会返回true,否则会返回false。