Class Sieve03g
- java.lang.Object
-
- de.tilman_neumann.jml.factor.siqs.sieve.Sieve03g
-
- All Implemented Interfaces:
Sieve
public class Sieve03g extends Object implements Sieve
Advanced non-segmented sieve implementation. Version 03: -> The smallest primes are not used for sieving. A prime p makes an overall contribution proportional to log(p)/p to the sieve array, but the runtime of sieving with a prime p is proportional to sieveArraySize/p. Thus sieving with small primes is less effective, and skipping them improves performance. -> Let counters run down -> simpler termination condition -> Faster zero-initialization of sieve array with System.arrayCopy(). Version 03b: -> Initialize sieve array such that a sieve hit is achieved if (logPSum & 0x80) != 0, and then use the or-trick in sieve:collect. -> precompute minSolutionCounts for all p -> allocate sieveArray with pMax extra entries to save size checks Version 03c: -> sieve positive x-values first, then negative x-values. Surprising improvement. Version 03d: -> Special treatment for large primes having 0-1 solutions for each of x1, x2 inside the sieve array. This is the biggest performance improvement since the 1.0.2 release! Version 03e: -> Collect smooth Q(x) for pos/neg x independently -> another small improvement Version 03f: -> Initialization is be done independently for pos/neg x, too -> now only 1 sieve array is needed! Version 03g: -> further unrolling of large primes -> sieve with all primes as if they have 2 x-solutions- Author:
- Tilman Neumann
-
-
Constructor Summary
Constructors Constructor Description Sieve03g()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
cleanUp()
Release memory after a factorization.String
getName()
SieveReport
getReport()
void
initializeForAParameter(SolutionArrays solutionArrays, int filteredBaseSize)
Set (filtered) prime base and smallest x1, x2 solutions for a new a-parameter.void
initializeForN(SieveParams sieveParams, int mergedBaseSize)
Initialize for a new N.List<Integer>
sieve()
Sieve for a new set of x1, x2 solutions.
-
-
-
Method Detail
-
getName
public String getName()
-
initializeForN
public void initializeForN(SieveParams sieveParams, int mergedBaseSize)
Description copied from interface:Sieve
Initialize for a new N. In PSIQS, this method is called for each thread, so things that can be computed before should be computed before.- Specified by:
initializeForN
in interfaceSieve
- Parameters:
sieveParams
- basic sieve parameters for a new NmergedBaseSize
- size of prime/power base after merging, before filtering
-
initializeForAParameter
public void initializeForAParameter(SolutionArrays solutionArrays, int filteredBaseSize)
Description copied from interface:Sieve
Set (filtered) prime base and smallest x1, x2 solutions for a new a-parameter.- Specified by:
initializeForAParameter
in interfaceSieve
filteredBaseSize
- number of primes and powers use for sieving
-
sieve
public List<Integer> sieve()
Description copied from interface:Sieve
Sieve for a new set of x1, x2 solutions.
-
getReport
public SieveReport getReport()
-
-