相关疑难解决方法(0)

如何使用6*k + - 1规则生成Primes

我们知道可以使用以下方法生成3以上的所有素数:

6 * k + 1
6 * k - 1
Run Code Online (Sandbox Code Playgroud)

但是,我们从上面的公式生成的所有数字都不是素数.

For Example:    
6 * 6 - 1 = 35 which is clearly divisible by 5.
Run Code Online (Sandbox Code Playgroud)

为了消除这些条件,我使用Sieve方法并删除了数字,这些数字是从上面公式生成的数字的因子.

使用事实:

如果没有素数因素,那么一个数字被称为素数.

  1. 因为我们可以使用上面的公式生成所有素数.
  2. 如果我们可以删除上述数字的所有倍数,我们只剩下素数.

生成低于1000的素数.

ArrayList<Integer> primes = new ArrayList<>();
primes.add(2);//explicitly add
primes.add(3);//2 and 3
int n = 1000;
for (int i = 1; i <= (n / 6) ; i++) {
//get all the numbers which can be generated by the formula
    int prod6k = 6 * i;
    primes.add(prod6k - 1); …
Run Code Online (Sandbox Code Playgroud)

java optimization primes sieve

20
推荐指数
2
解决办法
2065
查看次数

Eratosthenes筛选的Java实现可以超过n = 2 ^ 32?

目前我有这个素数发生器,限制在n <2 ^ 32-1.鉴于数组中元素的限制,我不完全确定如何进一步扩展限制.

筛:

public class Main {

public static void main(String args[]){
    long N = 2000000000;

    // initially assume all integers are prime

    boolean[] isPrime = new boolean[N + 1];
    for (int i = 2; i <= N; i++) {
        isPrime[i] = true;
    }

    // mark non-primes <= N using Sieve of Eratosthenes
    for (int i = 2; i*i <= N; i++) {

        // if i is prime, then mark multiples of i as nonprime
        // suffices to …
Run Code Online (Sandbox Code Playgroud)

java algorithm primes sieve-of-eratosthenes

7
推荐指数
1
解决办法
983
查看次数