列出java中用户输入的素数

时间:2017-10-30 00:03:28

标签: java

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

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

问题是我无法弄清楚如何让用户输入正确地执行此操作,我最终会重复多次重复的数字或者以用户输入结束的列表,任何帮助都会是apreciated

set xdata time

3 个答案:

答案 0 :(得分:1)

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

我们需要做的就是将逻辑分开来检查一个数字是否来自超过数字的逻辑,直到找到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++;
    }
}

答案 1 :(得分:0)

通过将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++;
       }
    }
    

答案 2 :(得分:0)

//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);

}