`

Generates Prime Numbers - the Sieve of Eratosthenes

阅读更多
/**
* This class Generates prime numbers up to a user specified
* maximum. The algorithm used is the Sieve of Eratosthenes.
* <p>
* Eratosthenes of Cyrene, b. c. 276 BC, Cyrene, Libya --
* d. c. 194, Alexandria. The first man to calculate the
* circumference of the Earth. Also known for working on
* calendars with leap years and ran the library at Alexandria.
* <p>
* The algorithm is quite simple. Given an array of integers
* starting at 2. Cross out all multiples of 2. Find the next
* uncrossed integer, and cross out all of its multiples.
* Repeat untilyou have passed the square root of the maximum
* value.
*
* @author Alphonse
* @version 13 Feb 2002 atp
*/
import java.util.Arrays;

public class PrimeGenerator {
    private static boolean[] crossedOut;
    private static int[] result;

    public static int[] generatePrimes(int maxValue) {
        if (maxValue < 2)
            return new int[0];
        else {
            uncrossIntegersUpTo(maxValue);
            crossOutMultiples();
            putUncrossedIntegersIntoResult();
            return result;
        }
    }

    private static void uncrossIntegersUpTo(int maxValue) {
        crossedOut = new boolean[maxValue + 1];
        for (int i = 2; i < crossedOut.length; i++)
            crossedOut[i] = false;
    }

    private static void crossOutMultiples() {
        int limit = determineIterationLimit();
        for (int i = 2; i <= limit; i++)
            if (notCrossed(i))
                crossOutMultiplesOf(i);
    }

    private static int determineIterationLimit() {
        // Every multiple in the array has a prime factor that
        // is less than or equal to the root of the array size,
        // so we don't have to cross out multiples of numbers
        // larger than that root.
        double iterationLimit = Math.sqrt(crossedOut.length);
        return (int) iterationLimit;
    }

    private static void crossOutMultiplesOf(int i) {
        for (int multiple = 2 * i; multiple < crossedOut.length; multiple += i)
            crossedOut[multiple] = true;
    }

    private static boolean notCrossed(int i) {
        return crossedOut[i] == false;
    }

    private static void putUncrossedIntegersIntoResult() {
        result = new int[numberOfUncrossedIntegers()];
        for (int j = 0, i = 2; i < crossedOut.length; i++)
            if (notCrossed(i))
                result[j++] = i;
    }

    private static int numberOfUncrossedIntegers() {
        int count = 0;
        for (int i = 2; i < crossedOut.length; i++)
            if (notCrossed(i))
                count++;
        return count;
    }
    
    public static void main(String[] args) {
        int[] a = generatePrimes(10);
        System.out.println(Arrays.toString(a));
    }
    
}

 

the program is to generate all the primes from 2 to the specified maximum.

 

what's about the Sieve of Eratosthenes?

 

The algorithm is quite simple. Given an array of integers starting at 2. Cross out all multiples of 2. Find the next uncrossed integer, and cross out all of its multiples. Repeat untilyou have passed the square root of the maximum value.

 

Every multiple in the array has a prime factor that is less than or equal to the root of the array size,
so we don't have to cross out multiples of numbers larger than that root.

 

multiple here means the number which is not a prime, it has a factor, and must have a prime factor which is less than or equal to its root.

 

素数,合数。

分享到:
评论

相关推荐

    Matlab-program-generates-a-unit-impulse-signal..r_impulse

    Matlab program generates a unit impulse signal.

    Torque Control Strategy of an IPMSM Considering the Flux Variation of the

    The scheme is based on measured data and interpolation method, and generates G modified current reference for the precise control of torque regardless of operating temperature and manufacturing ...

    Machine Learning for Model Order Reduction

    This method is called model order reduction (MOR), which reduces the complexity of the original large system and generates a reduced-order model (ROM) to represent the original one. Readers will gain...

    A Study of the Silent Flight of the Owl

    Many species of owl, including the barn and barred owl, use both visual and bi-aural location to search for prey around dusk and at night. Their bi-aural location system has a maximum sensitivity ...

    jdk-8u144-windows-x64

    This tool also helps manage JAR files, javadoc - the documentation generator, which automatically generates documentation from source code comments, jdb - the debugger, jps - the process status tool,...

    MATLAB高阶累积量工具箱

    % rpiid - Generates a sequence of i.i.d. random variables, various p.d.f.'s % trispect - Computes 2-D slice of true trispectrum of ARMA process % % Quadratic Phase Coupling (QPC) % qpcgen - ...

    FlexGraphics_V_1.79_D4-XE10.2_Downloadly.ir

    - FIX: In "Windows ClearType" font rendering mode (OS Windows mode) the "garbage" pixels can appear from the right and from the bottom sides of the painted rectangle of the TFlexText object....

    均匀的分布在任意维度上生成点的最佳采样分布_matlab_最佳采样分布_Generates

    以几乎均匀的分布在任意维度上生成点的最佳采样分布 ...Generates an optimally-sampled distribution of points in arbitrary dimensions with almost-uniform distribution.version of MAXIMIN.

    RealTimeFur.pdf

    The method generates convincing imagery of fur at interactive rates for models of moderate complexity. Furthermore, the scheme allows real-time modification of viewing and lighting conditions, as ...

    SQL_Assistant_9.5.469_Enterprise_Edition 破解

    SA0033327 - $$...$$ macro usage with SQL Server environments, in certain cases may trigger multiple executions of the same macro. SA0033398 - Schema compare raises silent Out of Memory exception and ...

    prbs check

    The LFSR generates the expected PRBS pattern based on predefined taps (`tap0`, `tap1`, etc.). - The LFSR is loaded with incoming data bits (`DIN`) during the `ST_LOAD*` states and shifts during ...

    Local optimization of dynamic programs

    of a nonlinear program (NLP) local solver that generates a KKT point of the constructed approximation to PCDP at each iteration if this problem is indeed feasible; (ii) existence of a Slater point of ...

    医疗三维软件相关下载

    CMake generates native makefiles and workspaces that can be used in the compiler environment of your choice. ----------------------------- vtk-5.0.4-win32.exe ----------------------------- The ...

    A simple program that generates non repeating numbers at ran

    标题 "A simple program that generates non repeating numbers at ran" 描述了一款简单的程序,该程序能够随机生成不重复的数字。这个程序可能被设计用于各种用途,例如抽奖系统、密码生成或者数据分析中的随机样本...

    [完美破解]VMProtect Ultimate 3.0.9 Build 695+ WebLM2.4.2.21

    Licensing feature allows to limit the period of free updates, set the time of life of serial number, prevent the code execution without serial numbers and much more. Any serial number can be blocked ...

    Image-GaborFilter2.rar_fast retrieval_low-level feature_novel de

    Image segmentation systems have the potential to dramatically improve... The method is fast, easy to implement and generates high quality saliency maps of the same size and resolution as the input image.

    sdi_tx_bridge

    Creates and embeds line numbers into the SDI data stream. ?Generates clock enables for SDI-SDI and 3G-SDI level B modes. ?Supports YCbCr data format at 10-bits per component. ?Supports SD-SDI, HD-...

Global site tag (gtag.js) - Google Analytics