Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/GAP/pkg/cubefree/gap/   (Algebra von RWTH Aachen Version 4.15.1©)  Datei vom 29.7.2025 mit Größe 5 kB image not shown  

Quelle  number.gi   Sprache: unbekannt

 
#############################################################################
##
#W  number.gi           Cubefree                               Heiko Dietrich
##                                                              
##


##############################################################################
##
#F  NumberCFSolvableGroups( arg )
##
## Counts the number of all cubefree solvable groups using the one-to-one
## correspondence. If the argument is [size,false] then the SmallGrps
## library is not used for non-squarefree but cubefree orders. 
## If the argument is 'size' or [size,true] then it will be used.
##
InstallGlobalFunction(NumberCFSolvableGroups, function( arg ) 
    local smallGrp, size, number, cl, i,j, FOrders, F, autPos, pos, autGrps,
           tmp, t;

    # check
    if Size(arg)=1 then
        size     := arg[1];
        smallGrp := true;
    elif Size(arg) in [2,5] then
        size     := arg[1];
        smallGrp := arg[2];
    else
        Error("Wrong input format: Either arg='size' or arg='size,bool'.");
    fi;
    if not IsBool(smallGrp) then
        Error("Second argument has to be Boolean.");
    fi;
    if not (IsInt( size ) and size>0) then
        Error("First argument has to be a positive  integer.");
    elif not IsCubeFreeInt( size ) then
        Error("First argument has to be a cube-free integer."); 
    fi;

    Info(InfoCF,1," Count number of solvable groups of order ",size,".");

    if size = 1 then
        return 1;
    fi;

    cl := Collected(FactorsInt(size));
    # to store the subgroups and normalizers of GL(2,p)
    # if Length(arg)<5 then the function was called from NumberCFGroups
    if Length(arg)<5 then
        autPos := [];
        for t in cl do
            Add(autPos,t[1]);
            if t[2]=2 then
                Add(autPos,t[1]^2);
            fi;
        od;
        autGrps := ListWithIdenticalEntries( Length( autPos ), 0 );
        pos     := function(x) return Position( autPos, x); end;
    else
        autPos  := arg[3];
        autGrps := arg[4];
        pos     := arg[5];
    fi;

    # Squarefree groups are solvable;
    # groups of order p^2q an p^2 are solvable as well.
    if cf_canUseSG(cl) then
        return NumberSmallGroups(size);
    fi;
    if smallGrp and size<50001 then
        i := 0;
        for F in [1..NumberSmallGroups(size)] do
            if IsSolvableGroup(SmallGroup(size,F)) then i := i+1; fi;
        od; 
        return i;
    fi;

    cl := Product(List(cl,x->x[1]));
   
    # Count all cube-free Frattini-free solvable groups F with
    # cl | |F| | size
    FOrders := Filtered(DivisorsInt(size),x-> x mod cl =0);
    number  := 0;
    for F in FOrders do
        if cf_canUseSG(F) or (smallGrp and F<50001) then
            if IsOddInt(F) then
                i := Length(Filtered([1..NumberSmallGroups(F)], x->
                      FrattinifactorSize(SmallGroup(F,x))= F));
            else
                i := Length(Filtered([1..NumberSmallGroups(F)], x->
                      FrattinifactorSize(SmallGroup(F,x))= F and
                      IsSolvable(SmallGroup(F,x)) ));
            fi;
            number := number + i;
        else
            tmp     := cf_FrattFreeSolvGroups(F,autPos, autGrps, pos);
            autGrps := tmp[2];
            number  := number + Length( tmp[1] );
        fi;;
    od;
    
    if Length(arg)<5 then
        return number;
    else
        return [number,autGrps];
    fi;
end);




##############################################################################
##
#F  NumberCFGroups( size )
##
## Counts all groups of cube-free order n. If the argument is [size,false]
## then the SmallGrps library is not used. If the argument is 'size' or 
## [size,true] then the SmallGroups library will be used.
##
InstallGlobalFunction(NumberCFGroups, function( arg ) 
    local nonAb, solvff, number, i, A, l, p, G, cl, FOrders, F, Fcl, psl, I,
          size, smallGrp,test, autPos,autGrps, pos, tmp, t;

    # check
    if Size(arg)=1 then 
        size     := arg[1];
        smallGrp := true;
    elif Size(arg)=2 then
        size     := arg[1];
        smallGrp := arg[2];
    else
        Error("Wrong input format: Either arg='size' or arg='size,bool'.");
    fi;
    if not IsBool(smallGrp) then
        Error("Second argument has to be Boolean.");
    fi;
    if not (IsInt( size ) and size>0) then
        Error("First argument has to be a positive integer.");
    elif not IsCubeFreeInt( size ) then
        Error("First argument has to be a cube-free integer."); 
    fi;
  
    Info(InfoCF,1,"Count number of groups of order ",size,".");

    if size = 1 then
        return 1;
    fi;

    cl := Collected(FactorsInt(size));
    autPos := [];
    for t in cl do
        Add(autPos,t[1]);
        if t[2]=2 then
            Add(autPos,t[1]^2);
        fi;
    od;
    autGrps := ListWithIdenticalEntries( Length( autPos ), 0 );
    pos     := function(x) return Position( autPos, x); end;

    if (size <50001 and smallGrp) or cf_canUseSG(cl) then
        return NumberSmallGroups(size);
    fi;

    # determine possible non-abelian factors
    cl     := List(cl,x->x[1]);
    cl     := Filtered(cl, x-> IsCubeFreeInt(x-1) and IsCubeFreeInt(x+1)
                                  and x>3);
    nonAb  := List( cl, x-> x*(x-1)*(x+1)/2);
    nonAb  := Filtered(nonAb, x-> size mod x=0);
    nonAb  := Concatenation([1],nonAb);
    number := 0;
   
    for A in nonAb do
        tmp     := NumberCFSolvableGroups(size/A, smallGrp,autPos,autGrps,pos);
        if IsInt(tmp) then
            number := number + tmp;
        else
            autGrps := tmp[2];
            number  := number + tmp[1];
       fi;
    od;

   return(number);
end);

[ Dauer der Verarbeitung: 0.2 Sekunden  (vorverarbeitet)  ]