繁体   English   中英

如何做一个程序来确定一个数是质数还是合数

[英]how to do a program that determines if a number is prime or composite

我是使用 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");

    }
}

我不确定你想用 test 变量做什么,但试试这样更干净的东西。

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 和它本身两个因数的数。 所以你必须检查它是否有任何大于 1 且小于 N 的因数。出于这个原因,你必须编写一个从2 到 N-1的循环来检查是否可以除以从2 到任何数字N-1

如果可以从循环中得到任何因子,则将变量prime设为假并退出循环,因为如果我们从循环中得到一个因子,则无需检查其他因子。

如果我们没有从循环中得到任何因子,那么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");

    }
}
  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");
    }

我知道两种方法:让我们记住使用“数字”。

1: ((数字 % 2) == 0)
2: ((数字 & 1) == 0)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM