为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕田峪4524236 2022-01-12 09:46:51
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 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

您的代码只会将数字标记为“非质数”,即ergebnis = true如果您找到一个等于或大于 2 的除数。显然,既没有0也没有1这样的除数。


所以只需添加一个额外的检查数字是否小于二:


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


查看完整回答
反对 回复 2022-01-12
?
繁星淼淼

TA贡献1775条经验 获得超11个赞

添加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();


}}


查看完整回答
反对 回复 2022-01-12
  • 2 回答
  • 0 关注
  • 177 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信