Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

SSL number.gi   Sprache: Shell

 

#############################################################################
##
#W  number.gi                 GAP4 package `Utils'                Stefan Kohl 
##
#Y  Copyright (C) 2015-2025, The GAP Group 

#############################################################################
##  this function has been transferred from RCWA 
##
#F  AllSmoothIntegers( <maxp>, <maxn> )
#F  AllSmoothIntegers( <primes>, <maxn> )
##
BindGlobal( "AllSmoothIntegers",

  function ( maxp, maxn )

    local  extend, nums, primes, p;

    extend := function ( n, mini )

      local  i;

      if n > maxn then return; fi;
      Add(nums,n);
      for i in [mini..Length(primes)] do
        extend(primes[i]*n,i);
      od;
    end;

    if   IsInt(maxp)
    then primes := Filtered([2..maxp],IsPrimeInt);
    elif IsList(maxp) and ForAll(maxp,p->IsInt(p) and IsPrimeInt(p))
    then primes := maxp;
    else return fail; fi;
    if not IsPosInt(maxn) then return fail; fi;

    nums := [];
    extend(1,1);
    return Set(nums);
  end );

#############################################################################
##  this function has been transferred from RCWA
##
#F  NextProbablyPrimeInt( <n> ) . . next integer passing `IsProbablyPrimeInt'
##
BindGlobal( "NextProbablyPrimeInt",

  function ( n )
    if   -3 = n            then n := -2;
    elif -3 < n  and n < 2 then n :=  2;
    elif n mod 2 = 0       then n := n+1;
    else                        n := n+2;
    fi;
    while not IsProbablyPrimeInt(n) do
        if n mod 6 = 1 then n := n+4;
        else                n := n+2;
        fi;
    od;
    return n;
  end );

#############################################################################
##  this function has been transferred from RCWA 
##
#F  RestrictedPartitionsWithoutRepetitions( <n>, <S> )
##
##  Given a positive integer n and a set of positive integers S, this func-
##  tion returns a list of all partitions of n into distinct elements of S.
##  The only difference to `RestrictedPartitions' is that no repetitions are
##  allowed.
##
BindGlobal( "RestrictedPartitionsWithoutRepetitions",

  function ( n, S )

    local  look, comps;

    look := function ( comp, remaining_n, remaining_S )

      local  newcomp, newremaining_n, newremaining_S, part, l;

      l := Reversed(remaining_S);
      for part in l do
        newcomp        := Concatenation(comp,[part]);
        newremaining_n := remaining_n - part;
        if newremaining_n = 0 then Add(comps,newcomp);
        else
          newremaining_S := Set(Filtered(remaining_S,
                                         s->s<part and s<=newremaining_n));
          if newremaining_S <> [] then
            look(newcomp,newremaining_n,newremaining_S);
          fi;
        fi;
      od;
    end;

    comps := [];
    look([],n,S);
    return comps;
  end );

#############################################################################
##  this function has been transferred from RCWA 
##
#F  PrimeNumbersIterator(  )
#F  PrimeNumbersIterator( chunksize )
##
BindGlobal( "PrimeNumbersIterator",

  function ( arg )

    local  next, copy, chunksize, maxdiv, nrdivs, offset;

    if   Length(arg) >= 1 and IsPosInt(arg[1])
    then chunksize := Maximum(arg[1],100); # must be bigger than largest
    else chunksize := 10000000; fi;        # prime gap in range looped over

    maxdiv     := RootInt(chunksize);
    offset     := List(Filtered([2..maxdiv],IsPrimeInt),p->[p,0]);
    nrdivs     := Length(offset);

    return IteratorByFunctions( rec( 

      NextIterator := function ( iter )
        local  sieve, range, p, q, pos, endpos, maxdiv_old, maxdiv, i, j;
        if iter!.index = 0 then
          sieve := ListWithIdenticalEntries(iter!.chunksize,0);
          if iter!.n = 0 then sieve[1] := 1; fi;
          for i in [1..iter!.nrdivs] do
            p := iter!.offset[i][1];
            if p > iter!.n then pos := 2 * p;
            else pos := iter!.offset[i][2]; 
            fi;
            if pos = 0 then pos := p; fi;
            endpos := pos + Int((iter!.chunksize-pos)/p) * p;
            if pos <= iter!.chunksize then
              range := [pos,pos+p..endpos];
              if IsRangeRep(range) then
                ADD_TO_LIST_ENTRIES_PLIST_RANGE(sieve,range,1);
              else
                for j in range do sieve[j] := sieve[j] + 1; od;
              fi;
            fi;
            if endpos <= iter!.chunksize then
              iter!.offset[i][2] := endpos + p - iter!.chunksize;
            else
              iter!.offset[i][2] := iter!.offset[i][2] - iter!.chunksize;
            fi;
          od;
          iter!.primepos := Positions(sieve,0);
        fi;
        iter!.index := iter!.index + 1;
        p := iter!.n + iter!.primepos[iter!.index];
        iter!.p := p;
        iter!.pi := iter!.pi + 1;
        if iter!.index = Length(iter!.primepos) then
          iter!.index := 0;
          iter!.n := iter!.n + iter!.chunksize;
          maxdiv_old := iter!.maxdiv;
          iter!.maxdiv := RootInt(iter!.n + iter!.chunksize);
          for q in Filtered([maxdiv_old+1..iter!.maxdiv],IsPrimeInt) do
            Add(iter!.offset,[q,(q-iter!.n) mod q]);
          od;
          iter!.nrdivs := Length(iter!.offset);
        fi;
        return p;
      end,

      ShallowCopy := function ( iter )
        return rec( chunksize  := iter!.chunksize,
                    n          := iter!.n,
                    p          := iter!.p,
                    pi         := iter!.pi,
                    index      := iter!.index,
                    primepos   := ShallowCopy(iter!.primepos),
                    nrdivs     := iter!.nrdivs,
                    maxdiv     := iter!.maxdiv,
                    offset     := StructuralCopy(iter!.offset) );
        end,

      IsDoneIterator := ReturnFalse,
      chunksize      := chunksize,
      n              := 0,
      p              := 0,
      pi             := 0,
      index          := 0,
      primepos       := [],
      nrdivs         := nrdivs,
      maxdiv         := maxdiv,
      offset         := offset ) );
  end );

#############################################################################
##  this function has been transferred from RCWA 
##
#M  AllProducts( <D>, <k> ) . . all products of <k>-tuples of elements of <D>
#M  AllProducts( <l>, <k> ) . . . . . . . . . . . . . . . . . . . . for lists
##
InstallMethod( AllProducts,
               "for lists (RCWA)", ReturnTrue, [ IsList, IsPosInt ], 0,
               function(l,k) return List(Tuples(l,k),Product); end );

#############################################################################
##
#E  number.gi . . . . . . . . . . . . . . . . . . . . . . . . . . . ends here

Messung
CHZG
8110010093

¤ Dauer der Verarbeitung: 0.4 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover


Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Open Source Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Statistik
#Sources=1104857
#Domains=417842