在java中查找素数时得到奇怪的输出

我有两种方法可以在 java 方法中找出素数 - 2 工作正常,但从方法 1 得到错误的输出,可以帮助我在逻辑上做错的地方。提前致谢


我的整个代码


package prepare;


import java.util.Scanner;


    public class Squar {

        //Method - 1 to find prime number

        boolean isPrime(int num){

            int exp = (int)Math.sqrt(num);

            for(int i=2;i<exp;i++){

                if(exp%2==0){

                    return false;

                }

            }return true;

        }


    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);

        int num = scan.nextInt();

        Squar s = new Squar();

        System.out.println("From M1 "+s.isPrime(num));

        scan.close();

        System.out.println("From M2 "+s.isPrimeNumber(num));

    }

    //Method - 2 to find prime number

    public  boolean isPrimeNumber(int number) {

        if(number == 1){

            return false;

        }

        if (number == 2 || number == 3) {

            return true;

        }

        if (number % 2 == 0) {

            return false;

        }

        int sqrt = (int) Math.sqrt(number) + 1;

        for (int i = 3; i < sqrt; i += 2) {

            if (number % i == 0) {

                return false;

            }

        }

        return true;

    }


}

对于输入:63 实际输出在素数中是假的,但从方法一输出得到不同的 输出


63

From M1 true

From M2 false


湖上湖
浏览 115回答 3
3回答

慕尼黑5688855

在isPrime()方法中,您不应该检查num % i == 0而不是检查exp % 2 == 0吗?

HUWWW

isPrime像这样改变功能。&nbsp;boolean isPrime(int num) {&nbsp; &nbsp; &nbsp; &nbsp; int exp = (int) Math.sqrt(num);&nbsp; &nbsp; &nbsp; &nbsp; for (int i = 2; i < exp; i++) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (num % i == 0) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return false;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; return true;&nbsp; &nbsp; }因为在 if 条件下,您正在检查 exp%2 == 0. 但是这个语句在迭代时不会改变i < exp。所以这个逻辑应该继续num % i == 0

杨魅力

看看你的这行代码if(exp%2==0){它应该是&nbsp;num % i
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java