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

根据在java中输入的范围显示所有素数

根据在java中输入的范围显示所有素数

jeck猫 2021-10-20 16:21:30
我正在尝试解决一个示例练习,该练习根据输入的范围显示质数。例如,如果我输入 10 它应该输出2 3 5 7 11 13 17 19 23 29.这是我的代码:System.out.print("Enter Range: ");int range = input.nextInt();int r = 0;for(int ctr1 = 2; ctr1 <= range; ctr1++){    for(int ctr2 =  1; ctr2 <= ctr1; ctr2++){        if(ctr1%ctr2 == 0){          r++;              }    }    if(r == 2){        System.out.println(ctr1);    }}当我输入 10 它只输出 2 时会发生什么。谁能告诉我我的代码中的错误?
查看完整描述

3 回答

?
开心每一天1111

TA贡献1836条经验 获得超13个赞

在这种情况下使用嵌套循环会使事情变得更加复杂。我建议您将解决方案分为两个步骤:


创建一个函数来确定一个数是否为素数。


private static boolean isPrime(int n) {

    //check if n is a multiple of 2

    if (n % 2 == 0) return false;

    //if not, then just check the odds

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

        if (n % i == 0)

            return false;

    }

    return true;

}

用循环找出前 N 个素数:


System.out.print("Enter Range: ");

int range = input.nextInt();


int count = 0;


for (int number = 2; count < range; number++) {

    if (isPrime(number)) {

        count++;

        System.out.println(number);

    }

}


查看完整回答
反对 回复 2021-10-20
?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

另一种解决方案)


public static boolean checkPrime(int i) {

    if (i <= 1)

      return false;

    else if (i <= 3)

      return true;

    else if (i % 2 == 0 || i % 3 == 0)

      return false;

    int n = 5;

    while (n * n <= i) {

      if (i % n == 0 || i % (n + 2) == 0)

        return false;

      n = n + 6;

    }

    return true;

  }




public static void main(String[] args) throws Exception {

    int isPrime = 0;

    int counter = 0;

    int size = 10;

    while (isPrime < size) {

      counter++;

      if (checkPrime(counter)) {

        isPrime++;

        System.out.println(counter);

      }

    }

  }


查看完整回答
反对 回复 2021-10-20
  • 3 回答
  • 0 关注
  • 140 浏览

添加回答

举报

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