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

Java程序给出两个区间之间的素数

Java程序给出两个区间之间的素数

守着一只汪 2023-10-13 15:07:54
我需要一个程序来打印任意两个间隔之间的所有素数,然后打印两个间隔之间有多少个素数。所以我有一个正在运行的代码,但它不会打印数字 2 并且我知道 2 是一个素数。它正在正确地执行其他所有操作。我尝试了一些其他可以打印 2 的代码,但如果我输入负数,它也会给出负数。import java.util.Scanner;class Main {  public static void main(String args[]) {    int first, last, flag = 0, i, j;    Scanner scanner = new Scanner(System.in);    System.out.print("\nEnter the lower bound : ");    first = scanner.nextInt();    System.out.print("\nEnter the upper bound : ");    last = scanner.nextInt();    System.out.println("The prime numbers in between the entered limits are :");    int x = 0;    for (i = first; i <= last; i++) {      for (j = 2; j < i; j++) {        if (i % j == 0) {          flag = 0;          break;        } else {          flag = 1;        }      }      if (flag == 1) {        x++;        System.out.println(i + " ");      }    }    System.out.println("Total number of prime numbers between " + first + " and " + last + " are " + x);  }}因此,如果我输入 -5(上限)和 10(下限),它应该打印: 2 3 5 7 -5 到 10 之间的素数总数是 4但它打印 3 5 7 -5 到 10 之间的素数总数是 3
查看完整描述

4 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞

只需在循环之前添加以下几行for,它就会给出预期的输出:


int x = 0;

if (first<3) {

    System.out.println(2);

    x++;

}

您的更新程序将是:


import java.util.Scanner;


class Main {


  public static void main(String args[]) {


    int first, last, flag = 0, i, j;


    Scanner scanner = new Scanner(System.in);


    System.out.print("\nEnter the lower bound : ");

    first = scanner.nextInt();

    System.out.print("\nEnter the upper bound : ");

    last = scanner.nextInt();

    System.out.println("The prime numbers in between the entered limits are :");


    int x = 0;

    if (first<3) {

        System.out.println(2);

        x++;

    }

    for (i = first; i <= last; i++) {

      for (j = 2; j < i; j++) {

        if (i % j == 0) {

          flag = 0;

          break;

        } else {

          flag = 1;

        }

      }

      if (flag == 1) {

        x++;

        System.out.println(i + " ");

      }

    }

    System.out.println("Total number of prime numbers between " + first + " and " + last + " are " + x);

  }

}


查看完整回答
反对 回复 2023-10-13
?
阿波罗的战车

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

内循环忽略数字 2。 j < i => 2 < 2 为 false



查看完整回答
反对 回复 2023-10-13
?
慕村225694

TA贡献1880条经验 获得超4个赞

您可以检查此代码(经过优化,因为它在大范围内运行得更快。在迭代所有数字之前循环返回)


 public static void main(String args[]) {

        int first;

        int last;

        Scanner scanner = new Scanner(System.in);

        System.out.print("\nEnter the lower bound : ");

        first = scanner.nextInt();

        System.out.print("\nEnter the upper bound : ");

        last = scanner.nextInt();

        System.out.println("The prime numbers in between the entered limits are :");


        int x = 0;

        for (int i = first; i <= last; i++) {

            if (isPrime(i)) {

                x++;

                System.out.println(i + " ");

            }

        }

        System.out.println("Total number of prime numbers between " + first + " and " + last + " are " + x);

    }


    static boolean isPrime(int n)

    {

        if (n <= 1) //less than 2 are not

            return false;

        if (n <=3) // 2 and 3 are prime

            return true;


        if (n % 2 == 0 || n % 3 == 0)

            return false;


        for (int i = 5; i * i <= n; i = i + 6)

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

                return false;


        return true;

    }

你不需要旗帜。


查看完整回答
反对 回复 2023-10-13
?
繁花如伊

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

尝试这个:



import java.util.Scanner;


public class Main {

    public static void main(String args[]) {

        int i, n;

        int num;

        int maxCheck;

        boolean isPrime = true;

        String primeNumbersFound = "";


      Scanner sc=new Scanner(System.in);

      System.out.println("Enter the first number: ");

        num = sc.nextInt();

        System.out.println("Enter the second number: ");

        maxCheck= sc.nextInt();


        for (i = num; i <= maxCheck; i++) {

            isPrime = CheckPrime(i);

            if (isPrime) {

            primeNumbersFound = primeNumbersFound + i + " ";

            }

        }

        System.out.println("Prime numbers from " + num + " to " + maxCheck + " are:");


        System.out.println(primeNumbersFound);


}


public static boolean CheckPrime(int n) {

    int remainder;

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

        remainder = n % i;

        if (remainder == 0) {

        return false;

          }

        }

        return true;


        }

}


查看完整回答
反对 回复 2023-10-13
  • 4 回答
  • 0 关注
  • 130 浏览

添加回答

举报

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