繁体   English   中英

从用户输入的java中列出素数

[英]listing prime numbers from user input in java

在 java 中,我想要做的是让用户输入一个大于 0 的值,并使用该数字输入从 2 开始的素数列表

所以如果用户输入“3”程序将显示 2,3,5 如果用户输入“5”程序将显示 2,3,5,7,11 等等

问题是我无法弄清楚如何让用户输入正确执行此操作,我要么以重复多次的数字结束,要么以用户输入结尾的列表,任何帮助都会受到赞赏

import java.util.Scanner;

public class Primes 
{

    public static void main(String[] args)
    {
        Scanner console = new Scanner(System.in);


        int n = console.nextInt();

        if(n<=0)
        {
            return;
        }
        else
        {
            for(int i=2; i < 100; i++)
            {
                boolean isPrime = true;

                for(int j=2; j < i; j++)
                {
                    if(i%j == 0)
                    {
                        isPrime = false;
                        break;
                    }
                }
                if(isPrime)
                {
                    System.out.println(i);
                }
            }
        }

    }

}

我宁愿有重构的代码,每个方法都在做一件事,这使它更容易阅读、调试和维护。

我们需要做的就是将检查数字是否为素数的逻辑与遍历数字直到找到n素数的逻辑分开:

public static void main(String[] args) {
    printNPrimes(5);
}

static private boolean isPrime(int n) {
    for (int i = 2; i <= Math.sqrt(n); i++) {
        if (n % i == 0) {
            return false;
        }
    }
    return true;
}

static private void printNPrimes(int n) {
    int i = 2;
    while (n > 0) {
        if (isPrime(i)) {
            System.out.println(i + " is Prime");
            n--;
        }
        i++;
    }
}

通过更改for循环以在找到足够的素数时停止并在找到素数时执行primesFound++找到了多少个素数:



    for (int i = 2, primesFound = 0; primesFound < n; i++)
    {
        boolean isPrime = true;

        for (int j = 2; j < i; j++)
        {
            if (i % j == 0)
            {
                isPrime = false;
                break;
            }
       }
       if (isPrime)
       {
           System.out.println(i);
           primesFound++;
       }
    }
    
//prime 

int i,j;

Set<Integer> primeNums = new HashSet<>();
Set<Integer> notPrimeNums = new HashSet<>();
Stack<Integer> stack = new Stack<>();

for(i=1; i<fiboList.size(); i++) {
    for(j=i+1; j<fiboList.size(); j++) {
        if( i % j == 0 ) {
            notPrimeNums.add(fiboList.get(i));
        }else {
            primeNums.add(fiboList.get(i));
        }
    }
}

stack.addAll(primeNums);
Collections.sort(stack);
System.out.println("Prime numbers:"+" "+stack);

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM