Prime Number Generator Logic

后端 未结 15 2344
旧时难觅i
旧时难觅i 2021-01-07 04:10

I am supposed to make a class PrimeNumberGenerator which has a method nextPrime that will print out all prime numbers up to a number the user input

15条回答
  •  灰色年华
    2021-01-07 04:36

    I know the question is for a while out here but since no one posted java8/stream approach solution, here is one of the possible ways.

    Gist can be forked here.

    Print output: [1, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71]

    import java.util.*;
    import java.util.stream.Stream;
    
    import static java.util.stream.Collectors.toList;
    
    
    public class PrimeNumber {
    
         /**
         * Java 8 / Lambda approach to generate Prime number.
         * Prime always start to look from number 1.
         * @param series Number of how many Prime number should be generated
         * @return List holding resulting Prime number.
         */
        public static List generate(int series) {
            Set set = new TreeSet<>();
            return Stream.iterate(1, i -> ++i)
                    .filter(i -> i %2 != 0)
                    .filter(i -> {
                        set.add(i);
                        return 0 == set.stream()
                                .filter(p -> p != 1)
                                .filter(p -> !Objects.equals(p, i))
                                .filter(p -> i % p == 0)
                                .count();
                    })
                    .limit(series)
                    .collect(toList());
        }
    
        // Let's test it!
        public static void main(String[] args) {
            List generate = PrimeNumber.generate(20);
            System.out.println(generate);
        }
    }
    

提交回复
热议问题