Java 中给定范围内的质数

问题描述 投票:0回答:3

我试图从用户那里获取一个范围的输入,然后找到该范围内的所有素数。我使用的逻辑是,任何大于 2 且小于自身且不能被此范围内的任何数字(2 到小于自身)整除的数字都是质数。

public class Main
{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("Enter the range : ");
        int n1=sc.nextInt();
        int n2=sc.nextInt();
        int fl=0;
        for(int i=n1;i<n2;i++)
        {
            for(int j=2;j<i;j++)
            { 
                if(i % j == 0)
                {
                    fl=1;
                }
            }
            if(fl == 0)
                System.out.println(i);
        }
        
    }
}

这是我得到的输出: 1 2 3

当范围为 1 至 20(不超过 3)时。 请帮帮我。

java loops numbers primes
3个回答
1
投票

正如 Turamarth 所指出的,您需要在每次迭代时重置标志。我还建议你循环直到

i <= n2
,否则你会错过最后一个数字,并添加输入检查。

public static void main(String args[])
{
    int n1;
    int n2;
    boolean flag;
    
    Scanner sc = new Scanner(System.in);
    System.out.print("Enter the range: ");
    n1 = sc.nextInt();
    n2 = sc.nextInt();
    sc.close();
    
    if (n1 < 2)
        n1 = 2;
    if (n2 < 2)
    {
        System.out.println("No prime numbers in range.");
        return;
    }
    
    System.out.println("Result: ");
    for(int i = n1; i <= n2; i++)
    {
        flag = false;
        for(int j = 2; j < i; j++)
        { 
            if(i % j == 0)
            {
                flag = true;
            }
        }
        if(!flag)
            System.out.println(i);
    }
}

[1, 19] 示例:

Enter the range: 1 19
Result: 
2
3
5
7
11
13
17
19

优化

考虑一下:

  • 当找到除数 (
    i % j == 0
    ) 时,可以通过在 if 条件中放入
    break;
    语句来退出第二个循环;
  • 2之后所有素数都是奇数,因此当
    i >= 3
    时你可以将其增加2:
    i += 2

0
投票

在外循环的每次迭代开始时,您必须将标志

fl
重置回 0。
目前,一旦遇到非质数(即 4),它将将该值设置为 1,然后为剩余的数字保留该值。


0
投票
public static void main(String[] args){
    Scanner sc=new Scanner(System.in);
    System.out.println("enter n1:");
    int n1=sc.nextInt();
    System.out.println("enter n2:");
    int n2=sc.nextInt();
    int i;
    int j;
    int flag=0;
    for(i=n1;i<=n2;i++)
    {
    for(j=2;j<i ;j++)
    {
        if(i % j==0)
        {
            flag++;
            break;
        }
    }
    if(flag==0)
        {
         System.out.println("i= "+i);
        }
    flag=0;

    }
}
© www.soinside.com 2019 - 2024. All rights reserved.