首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >打印前N个素数

打印前N个素数
EN

Stack Overflow用户
提问于 2015-11-16 05:48:38
回答 5查看 51.2K关注 0票数 1

语句是:编写一个读取整数N并打印前N个素数的程序。

代码语言:javascript
复制
public static void main(String[] args) 
{
    Scanner scan = new Scanner(System.in);

    int N = scan.nextInt();
    int x = 2;

    for(int i = 0; i <= N; i++)
    {
        int count = 0;

        for(int j = 1; j <= x; j++)
            if(x%j == 0)
                count++;

        if(count == 2)
            System.out.print(x + " ");

        x++;
    }
}

当我运行这段代码时,它没有给出确切的N个数字。例如,对于N=1 &2,它打印前2个质数,对于N=3& 4,它打印前3个质数,对于N=5& 6,它打印前4个质数,依此类推。这段代码有什么问题?

EN

回答 5

Stack Overflow用户

发布于 2015-11-16 06:10:55

我认为您的程序中有许多缺陷需要修复,因此我决定编写一个更简单、更优雅的程序。

代码语言:javascript
复制
Scanner scan = new Scanner(System.in);
int N = Integer.parseInt( scan.nextLine());
int count = 0;
int num = 2;
while(count != N) { // while count!= number of prime numbers entered keep searching..
    boolean prime = true;// to determine whether the number is prime or not
    for (int i = 2; i <= Math.sqrt(num); i++) { //efficiency matters
        if (num % i == 0) {
            prime = false; // if number divides any other number its not a prime so set prime to false and break the loop.
            break;
        }

    }
    if (prime) {
        count++;
        System.out.println(num);
    }
    num++; see if next number is prime or not.
}
票数 5
EN

Stack Overflow用户

发布于 2016-12-15 21:23:19

代码语言:javascript
复制
// Java Program to generate first 'N' Prime Numbers
public class prime
{
    public static void main(String[]args)
    {
        int count = 0, max_count = 100, i;
        System.out.println("First "+max_count+" Prime Numbers:");

        for(int num=1; count<max_count; num++)
        {
            for(i=2; num%i != 0; i++);

            if(i == num)
            {
                System.out.print(" "+num);
                count++;
            }
        }
    }
}
票数 2
EN

Stack Overflow用户

发布于 2016-12-28 13:23:36

使用动态编程:

任何不是素数的数总是可以被数列中它前面的至少一个素数整除。如果任何一个数不能除以它前面的所有质数,那么这个数也是质数

代码语言:javascript
复制
void printPrimeNumbers(int n) {
    ArrayList<Integer> primeNumbers = new ArrayList<>();
    primeNumbers.add(2);
    for (int i = 3; i < n; i+=2) { // skip over even numbers since they are not prime
        boolean isPrime = true;
        for (Integer prime : primeNumbers) { // check current prime numbers to see if it evenly divides into number
            if (i % prime == 0) { // when number is not prime
                isPrime = false;
                break; // optimization: stop checking when number is already not prime
            }
        }
        if (isPrime) {
            primeNumbers.add(i);
        }
    }
    System.out.println(primeNumbers);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33725505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档