为什么1或0仍然是质数?

时间:2018-11-10 15:32:11

标签: java

import java.util.Scanner;

public class Primzahl {

    public static void main(String[] args) {

        boolean ergebnis = false; // Abfragen ob Ergebnis wahr oder falsch
        int i;
        int n; // Variablen deklarieren
        Scanner scanner = new Scanner(System.in); // Scanner aufrufen

        System.out.println("Bitte geben Sie die erste zu untersuchende Zahl ein: \n");

        n = scanner.nextInt();

        System.out.println(" \nEs wird nun überprüft, ob die Zahl " + n + " eine Primzahl ist: \n");

        for (i = 2; i < n; i++) { // Zählvariable; Bedingung; Schrittweite
            if ((n % i) == 0) // Wenn n mod 2 = 0
            {
                ergebnis = true;

            }
        }

        if (ergebnis == false) {
            System.out.println("Die eingegebene Zahl ist eine Primzahl");
        }

        else {
            System.out.println("Die eingegebene Zahl ist keine Primzahl");
        }

        scanner.close();

    }
}

我尝试编写一个代码,检查它是否是质数。但是我不明白逻辑。

问题:为什么0或1仍然是质数,我该如何解决?

2 个答案:

答案 0 :(得分:0)

您的代码只会将数字标记为“非质数”,即ergebnis = true是指发现等于或大于2的除数。显然,01都没有这样的除数。

因此,只需额外检查一下数字是否小于2:

if (n < 2) {
    ergebnis = true; // meaning 'not prime'
}

(顺便说一句:变量名的糟糕选择。ergebnis(德语为“结果”)表示结果是“素数”还是“不是素数”?)

此外,您可以改善注释:不仅重复代码的作用,还请解释为什么这样做以及它的含义。例如,代替

if((n%i)==0) //Wenn n mod 2 = 0 

怎么样

if((n%i)==0) //divisor found -> not a prime

答案 1 :(得分:0)

添加n>1条件。

这也将为 0 1 负数给出正确的结果!

import java.util.Scanner; 
public class Primzahl {

public static void main(String [] args) {

    boolean ergebnis=false; //Abfragen ob Ergebnis wahr oder falsch
    int i;
    int n; //Variablen deklarieren
    Scanner scanner = new Scanner(System.in); //Scanner aufrufen 

    System.out.println("Bitte geben Sie die erste zu untersuchende Zahl ein: \n");

    n=scanner.nextInt();

    System.out.println(" \nEs wird nun überprüft, ob die Zahl " + n + " eine Primzahl ist: \n" );



    for (i=2;i<n;i++){ //Zählvariable; Bedingung; Schrittweite
        if((n%i)==0) //Wenn n mod 2 = 0 
        {
            ergebnis=true; 

        }}

    if (ergebnis==false && n>1)
    {
    System.out.println("Die eingegebene Zahl ist eine Primzahl");
    }

    else 
    {
        System.out.println("Die eingegebene Zahl ist keine Primzahl");
        }

    scanner.close();

}}