Java 打印从 1 到 100 的质数

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/36732025/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-11 18:37:24  来源:igfitidea点击:

Printing prime number from 1 to 100

java

提问by Jai

This program is supposed to output the prime numbers between 1 and 100. Will anyone please explain me the flow the programme below? I am having difficulty in writing the programme below. I did find it on the internet but still I can't figure out how it works and how the flow of the programme will be?

这个程序应该输出 1 到 100 之间的素数。有人可以解释我下面程序的流程吗?我在编写下面的程序时遇到困难。我确实在互联网上找到了它,但我仍然无法弄清楚它是如何工作的以及程序的流程如何?

public class GeneratePrimeNumbersExample {

    public static void main(String[] args) {

            //define limit
            int limit = 100;

            System.out.println("Prime numbers between 1 and " + limit);

            //loop through the numbers one by one
            for(int i=1; i < 100; i++){

                    boolean isPrime = true;

                    //check to see if the number is prime
                    for(int j=2; j < i ; j++){

                            if(i % j == 0){
                                    isPrime = false;
                                    break;
                            }
                    }
                    // print the number
                    if(isPrime)
                            System.out.print(i + " ");
            }
    }
}

Output of Prime Numbers example would be Prime numbers between 1 and 100

素数示例的输出将是 1 到 100 之间的素数

1 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

1 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

回答by Himanshu Bhardwaj

How would you find a prime number with plain vanilla solution?If number is prime. It will not be a multiple of any number other than itself. So assume number is x. This number will not be divisible by any number when starting from 2 till x-1. Why start from 2 and not 1 because every number is divisible by 1. The above code is trying to replicate the same behavior. To find all primes between 1 till 99 (as per the loop):

你将如何用普通的解决方案找到素数?如果数是素数。它不会是除自身以外的任何数字的倍数。所以假设数字是x。当从 2 到 x-1 时,此数字不能被任何数字整除。为什么从 2 而不是 1 开始,因为每个数字都可以被 1 整除。上面的代码试图复制相同的行为。要查找 1 到 99 之间的所有素数(根据循环):

  1. From 2 till number from (outer loop - 1)
  2. Try dividing the number and check if it's divisible. (remainder should be zero).
  3. If true number is not prime. Else number is prime.
  1. 从 2 到数字来自(外循环 - 1)
  2. 尝试将数字相除并检查它是否可整除。(余数应为零)。
  3. 如果真数不是素数。其他数是素数。

回答by sprinter

If you split the various parts out into their own methods with appropriate names it becomes a bit easier to understand:

如果您将各个部分拆分为具有适当名称的自己的方法,它会变得更容易理解:

for (int n = 1; n < 100; n++)
    if (isPrime(n))
        System.out.println(n);

private boolean isPrime(int n) {
    for (int f = 2; f < n; f++) {
        if (isFactor(f, n))
            return false;
    }
    return true;
}

private boolean isFactor(int factor, int number) {
    return number % factor == 0;
}

This is also an area where Java 8 streams can make things a bit clearer:

这也是 Java 8 流可以让事情变得更清晰的一个领域:

List<Integer> primes = IntStream.range(1, 100)
    .filter(this::hasNoFactors)
    .collect(Collectors.toList());

private boolean hasNoFactors(int number) {
    return IntStream.range(2, number)
        .noneMatch(f -> number % f == 0);
}

Also note that this is a horribly inefficient algorithm. You don't need to check every possible factor from 2 to n, just the primes. You can also take advantage of multi-processor machines:

还要注意,这是一个非常低效的算法。您不需要检查从 2 到 n 的每个可能的因子,只需检查素数即可。您还可以利用多处理器机器:

List<Integer> primes = new ArrayList<>();
IntStream.range(2, 100)
    .filter(n -> primes.parallelStream().noneMatch(p -> n % p == 0))
    .forEach(primes::add);

回答by Paresh Kumar

public class Prime {
    public static void main(String arg[])
    {
        int count=0;

        for(int i=2;i<100;i++)
        {
            for(int j=2;j<i;j++)
            {
                if(i%j!=0)
                {
                    count++;
                    if(count==i-2)
                    {
                        System.out.print(i+" ");
                    }
                }
            }
            count = 0;
        }
    }
}

回答by user8144104

public class primenum {

    public static void main(String[] args) {
        for(int i=2;i<100;i++){
            int count=1;
            for(int j=2;j<i;j++){
                if(i%j ==0){
                    count=0;
                    break;
                }

            }if(count==1){
                System.out.println(i);

            }
        }

    }

回答by Dinesh Sonachalam

The number which is only divisible by itself and 1 is known as prime number. Here is the simplest version of the code for finding prime numbers between 1 to 100.

只能被它自己和1整除的数称为质数。这是用于查找 1 到 100 之间的质数的代码的最简单版本。

import java.io.*;
import java.util.*;
class solution
{
    public static void main(String args[])
    {
        Scanner scan = new Scanner(System.in);
        int n = 100;
        /*
            A prime number is a whole number greater than 1, whose only two whole-number factors are 1 and itself.
        */
        for(int i=2;i<=n;i++) // 1.So we are starting with initialization i = 2
        {
            int flag = 1;
            for(int j=2;j<=i/2;j++)  // 2.Try dividing the number by half check whether it divisible
            {
                if(i%j==0) // 3. If the number is divisible by other number ->Not a prime Number
                {
                    flag = 0;
                    break;
                }

            }
            if(flag==1) // 4. If the number is not divisible by any other numbers but only by itself and 1 -> prime no
            {
                System.out.print(i+" ");
            }
        }
    }
}
/*
    Output:
    2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
*/

回答by Motolola

public static ArrayList prime(int limit){

公共静态 ArrayList 素数(整数限制){

    ArrayList<Integer> primes = new ArrayList<>();
    for(int p = 2; p <= limit; p++) {
        int count = 0;
        for(int i=2; i < p; i++) {

            if (p%i == 0) {
                count++;
            }
        }

        if (count == 0) {
            primes.add(p);
        }   
    }
    return primes;
}

回答by Mahendra Sri

    public static List<Integer> getPrimeNumbers(int from , int to) {
    List<Integer> list = new ArrayList<>();
    for (int i = from;i <= to; i++) {
        int count = 0;
        for (int num = i; num>=1;num--) {
            if(i%num == 0){
                count++;
            }
        }
        if(count ==2) {
            list.add(i);
        }
    }
    return list;
}