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

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

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

湖上湖 2021-09-12 15:29:44
我有两种方法可以在 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 实际输出在素数中是假的,但从方法一输出得到不同的 输出63From M1 trueFrom M2 false
查看完整描述

3 回答

?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

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


查看完整回答
反对 回复 2021-09-12
?
HUWWW

TA贡献1874条经验 获得超12个赞

isPrime像这样改变功能。


 boolean isPrime(int num) {

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

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

            if (num % i == 0) {

                return false;

            }

        }

        return true;

    }

因为在 if 条件下,您正在检查 exp%2 == 0. 但是这个语句在迭代时不会改变i < exp。所以这个逻辑应该继续num % i == 0


查看完整回答
反对 回复 2021-09-12
?
杨魅力

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

看看你的这行代码

if(exp%2==0){

它应该是 num % i


查看完整回答
反对 回复 2021-09-12
  • 3 回答
  • 0 关注
  • 114 浏览

添加回答

举报

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