Unit primesieve

Description

Pascal bindings for primesieve library.

primesieve - library for fast prime number generation.
Copyright (C) 2010 - 2021 Kim Walisch, <kim.walisch@gmail.com>
https://github.com/kimwalisch/primesieve

primesieve-pas - FPC/Delphi API for primesieve library.
Copyright (C) 2020 - 2021 I. Kakoulidis, <ioulianos.kakoulidis@hotmail.com>
https://github.com/JulStrat/primesieve-pas

This file is distributed under the BSD 2-Clause License.

Overview

Classes, Interfaces, Objects and Records

Name Description
Record primesieve_iterator  
Record tuplets_iterator  

Functions and Procedures

function primesieve_generate_primes( start, stop: UInt64; var size: NativeUInt; ptype: Integer ): Pointer; cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_generate_primes';
function primesieve_generate_n_primes( n: UInt64; start: UInt64; ptype: Integer ): Pointer; cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_generate_n_primes';
function primesieve_nth_prime( n: Int64; start: UInt64 ): UInt64; cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_nth_prime';
function primesieve_count_primes( start, stop: UInt64 ): UInt64; cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_count_primes';
function primesieve_count_twins( start, stop: UInt64 ): UInt64; cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_count_twins';
function primesieve_count_triplets( start, stop: UInt64 ): UInt64; cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_count_triplets';
function primesieve_count_quadruplets( start, stop: UInt64 ): UInt64; cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_count_quadruplets';
function primesieve_count_quintuplets( start, stop: UInt64 ): UInt64; cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_count_quintuplets';
function primesieve_count_sextuplets( start, stop: UInt64 ): UInt64; cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_count_sextuplets';
procedure primesieve_print_primes( start, stop: UInt64 ); cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_print_primes';
procedure primesieve_print_twins( start, stop: UInt64 ); cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_print_twins';
procedure primesieve_print_triplets( start, stop: UInt64 ); cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_print_triplets';
procedure primesieve_print_quadruplets( start, stop: UInt64 ); cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_print_quadruplets';
procedure primesieve_print_quintuplets( start, stop: UInt64 ); cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_print_quintuplets';
procedure primesieve_print_sextuplets( start, stop: UInt64 ); cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_print_sextuplets';
function primesieve_get_max_stop(): UInt64; cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_get_max_stop';
function primesieve_get_sieve_size(): Integer; cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_get_sieve_size';
function primesieve_get_num_threads(): Integer; cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_get_num_threads';
procedure primesieve_set_sieve_size( sieve_size: Integer ); cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_set_sieve_size';
procedure primesieve_set_num_threads( num_threads: Integer ); cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_set_num_threads';
procedure primesieve_free( primes: Pointer ); cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_free';
function primesieve_version(): PAnsiChar; cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_version';
procedure primesieve_init( var it: primesieve_iterator ); cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_init';
procedure primesieve_free_iterator( var it: primesieve_iterator ); cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_free_iterator';
procedure primesieve_skipto( var it: primesieve_iterator; start, stop_hint: UInt64 ); cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_skipto';
function primesieve_next_prime( var it: primesieve_iterator ): UInt64; inline;
function primesieve_prev_prime( var it: primesieve_iterator ): UInt64; inline;
procedure tuplets_init( var it: tuplets_iterator );
procedure tuplets_free( var it: tuplets_iterator );
procedure tuplets_skipto( var it: tuplets_iterator; start: UInt64 );
function tuplets_next_twin( var it: tuplets_iterator ): UInt64;
function tuplets_next_triplet( var it: tuplets_iterator ): UInt64;
function tuplets_next_quadruplet( var it: tuplets_iterator ): UInt64;
function tuplets_next_quintuplet( var it: tuplets_iterator ): UInt64;
function tuplets_next_sextuplet( var it: tuplets_iterator ): UInt64;

Types

PUInt64 = ˆUInt64;
PInt64 = ˆInt64;

Constants

_PRIMESIEVE_VERSION = '7.7';
_PRIMESIEVE_VERSION_MAJOR = 7;
_PRIMESIEVE_VERSION_MINOR = 7;
_PRIMESIEVE_PAS_VERSION = '0.5.1';
_PRIMESIEVE_PAS_VERSION_MAJOR = 0;
_PRIMESIEVE_PAS_VERSION_MINOR = 5;
_PRIMESIEVE_PAS_VERSION_PATCH = 1;
_PRIMESIEVE_ERROR = not UInt64(0);
INT16_PRIMES = 8;
UINT16_PRIMES = 9;
INT32_PRIMES = 10;
UINT32_PRIMES = 11;
INT64_PRIMES = 12;
UINT64_PRIMES = 13;

Description

Functions and Procedures

function primesieve_generate_primes( start, stop: UInt64; var size: NativeUInt; ptype: Integer ): Pointer; cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_generate_primes';

Get an array with the primes inside the interval [start, stop].

Parameters
size
The size of the returned primes array.
ptype
The type of the primes to generate, e.g. INT_PRIMES32.
function primesieve_generate_n_primes( n: UInt64; start: UInt64; ptype: Integer ): Pointer; cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_generate_n_primes';

Get an array with the first n primes >= start.

Parameters
ptype
The type of the primes to generate, e.g. INT_PRIMES32.
function primesieve_nth_prime( n: Int64; start: UInt64 ): UInt64; cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_nth_prime';

Find the nth prime. By default all CPU cores are used, use primesieve_set_num_threads to change the number of threads.

Note that each call to primesieve_nth_prime incurs an initialization overhead of O(sqrt(start)) even if n is tiny. Hence it is not a good idea to use primesieve_nth_prime repeatedly in a loop to get the next (or previous) prime. For this use case it is better to use a primesieve_iterator which needs to be initialized only once.

Parameters
n
if n = 0 finds the 1st prime >= start,
if n > 0 finds the nth prime > start,
if n < 0 finds the nth prime < start (backwards).
function primesieve_count_primes( start, stop: UInt64 ): UInt64; cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_count_primes';

Count the primes within the interval [start, stop]. By default all CPU cores are used, use primesieve_set_num_threads to change the number of threads.

Note that each call to primesieve_count_primes incurs an initialization overhead of O(sqrt(stop)) even if the interval [start, stop] is tiny. Hence if you have written an algorithm that makes many calls to primesieve_count_primes it may be preferable to use a primesieve_iterator which needs to be initialized only once.

function primesieve_count_twins( start, stop: UInt64 ): UInt64; cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_count_twins';

Count the twin primes within the interval [start, stop].

By default all CPU cores are used, use primesieve_set_num_threads to change the number of threads.

function primesieve_count_triplets( start, stop: UInt64 ): UInt64; cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_count_triplets';

Count the prime triplets within the interval [start, stop].

By default all CPU cores are used, use primesieve_set_num_threads to change the number of threads.

function primesieve_count_quadruplets( start, stop: UInt64 ): UInt64; cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_count_quadruplets';

Count the prime quadruplets within the interval [start, stop].

By default all CPU cores are used, use primesieve_set_num_threads to change the number of threads.

function primesieve_count_quintuplets( start, stop: UInt64 ): UInt64; cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_count_quintuplets';

Count the prime quintuplets within the interval [start, stop].

By default all CPU cores are used, use primesieve_set_num_threads to change the number of threads.

function primesieve_count_sextuplets( start, stop: UInt64 ): UInt64; cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_count_sextuplets';

Count the prime sextuplets within the interval [start, stop].

By default all CPU cores are used, use primesieve_set_num_threads to change the number of threads.

procedure primesieve_print_primes( start, stop: UInt64 ); cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_print_primes';

Print the primes within the interval [start, stop] to the standard output.

procedure primesieve_print_twins( start, stop: UInt64 ); cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_print_twins';

Print the twin primes within the interval [start, stop] to the standard output.

procedure primesieve_print_triplets( start, stop: UInt64 ); cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_print_triplets';

Print the prime triplets within the interval [start, stop] to the standard output.

procedure primesieve_print_quadruplets( start, stop: UInt64 ); cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_print_quadruplets';

Print the prime quadruplets within the interval [start, stop] to the standard output.

procedure primesieve_print_quintuplets( start, stop: UInt64 ); cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_print_quintuplets';

Print the prime quintuplets within the interval [start, stop] to the standard output.

procedure primesieve_print_sextuplets( start, stop: UInt64 ); cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_print_sextuplets';

Print the prime sextuplets within the interval [start, stop] to the standard output.

function primesieve_get_max_stop(): UInt64; cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_get_max_stop';

Returns the largest valid stop number for primesieve.

2ˆ64-1 (UINT64_MAX)

function primesieve_get_sieve_size(): Integer; cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_get_sieve_size';

Get the current set sieve size in KiB.

function primesieve_get_num_threads(): Integer; cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_get_num_threads';

Get the current set number of threads.

procedure primesieve_set_sieve_size( sieve_size: Integer ); cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_set_sieve_size';

Set the sieve size in KiB (kibibyte). The best sieving performance is achieved with a sieve size of your CPU's L1 or L2 cache size (per core). sieve_size >= 16 and <= 4096

procedure primesieve_set_num_threads( num_threads: Integer ); cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_set_num_threads';

Set the number of threads for use in primesieve_count_*() and primesieve_nth_prime. By default all CPU cores are used.

procedure primesieve_free( primes: Pointer ); cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_free';

Deallocate a primes array created using the primesieve_generate_primes or primesieve_generate_n_primes functions.

function primesieve_version(): PAnsiChar; cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_version';

Get the primesieve version number, in the form “i.j”

procedure primesieve_init( var it: primesieve_iterator ); cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_init';

Initialize the primesieve iterator before first using it.

procedure primesieve_free_iterator( var it: primesieve_iterator ); cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_free_iterator';

Free all iterator memory.

procedure primesieve_skipto( var it: primesieve_iterator; start, stop_hint: UInt64 ); cdecl; external LIB_PRIMESIEVE name LIB_FNPFX + 'primesieve_skipto';

Reset the primesieve iterator to start.

Parameters
start
Generate primes > start (or < start)
stop_hint
Stop number optimization hint. E.g. if you want to generate the primes below 1000 use stop_hint = 1000, if you don't know use primesieve_get_max_stop
function primesieve_next_prime( var it: primesieve_iterator ): UInt64; inline;

Get the next prime.

Returns UINT64_MAX if next prime prime > 2ˆ64.

function primesieve_prev_prime( var it: primesieve_iterator ): UInt64; inline;

Get the previous prime.

primesieve_prev_prime returns 0 for n <= 2. Note that primesieve_next_prime runs up to 2x faster than primesieve_prev_prime. Hence if the same algorithm can be written using either primesieve_prev_prime or primesieve_next_prime it is preferable to use primesieve_next_prime.

procedure tuplets_init( var it: tuplets_iterator );

Initialize the prime tuplets iterator before first using it.

procedure tuplets_free( var it: tuplets_iterator );

Free all prime tuplets iterator memory.

procedure tuplets_skipto( var it: tuplets_iterator; start: UInt64 );

Reset the prime tuplets iterator to start.

function tuplets_next_twin( var it: tuplets_iterator ): UInt64;

Get next sequence of two primes of the form (p, p+2)

function tuplets_next_triplet( var it: tuplets_iterator ): UInt64;

Get next sequence of three primes of the form (p, p + 2, p + 6) or (p, p + 4, p + 6)

function tuplets_next_quadruplet( var it: tuplets_iterator ): UInt64;

Get next sequence of four primes of the form (p, p+2, p+6, p+8)

function tuplets_next_quintuplet( var it: tuplets_iterator ): UInt64;

Get next sequence of five primes of the form (p, p+2, p+6, p+8, p+12) or (p, p+4, p+6, p+10, p+12)

function tuplets_next_sextuplet( var it: tuplets_iterator ): UInt64;

Get next sequence of six primes of the form (p, p+4, p+6, p+10, p+12, p+16)

Types

PUInt64 = ˆUInt64;
 
PInt64 = ˆInt64;
 

Constants

_PRIMESIEVE_VERSION = '7.7';
 
_PRIMESIEVE_VERSION_MAJOR = 7;
 
_PRIMESIEVE_VERSION_MINOR = 7;
 
_PRIMESIEVE_PAS_VERSION = '0.5.1';

Pascal API version

_PRIMESIEVE_PAS_VERSION_MAJOR = 0;
 
_PRIMESIEVE_PAS_VERSION_MINOR = 5;
 
_PRIMESIEVE_PAS_VERSION_PATCH = 1;
 
_PRIMESIEVE_ERROR = not UInt64(0);

primesieve functions return PRIMESIEVE_ERROR (UINT64_MAX) if any error occurs.

INT16_PRIMES = 8;

Generate primes of Int16 (c int16_t) type

UINT16_PRIMES = 9;

Generate primes of UInt16 (c uint16_t) type

INT32_PRIMES = 10;

Generate primes of Int32 (c int32_t) type

UINT32_PRIMES = 11;

Generate primes of UInt32 (c uint32_t) type

INT64_PRIMES = 12;

Generate primes of Int64 (c int64_t) type

UINT64_PRIMES = 13;

Generate primes of UInt64 (c uint64_t) type


Generated by PasDoc 0.16.0.