needed = addRow(ExpVecWord(u)); if (needed) {
printf("# [ ["); for (i = 0; i < 3; i++) {
printWord(ul[i], 'A'); if (i != 2) printf(",");
}
printf("], ["); for (i = 3; i < 6; i++) {
printWord(ul[i], 'A'); if (i != 5) printf(",");
}
printf("] ]\n");
}
free(u);
}
staticvoid buildTuple(word *ul, long i, gen g, long wt, long which) { long save_wt;
word u;
if (wt == 0 && which == 5 && i > 0) {
eval8Power(ul[5]);
}
if (wt == 0 && which == 0 && i > 0) {
evalTrMetAbRel(ul); return;
}
if (i > 0 && which > 0) buildTuple(ul, 0, 1, wt, which - 1);
if (g > NrPcGens) return;
save_wt = wt;
u = ul[ which ]; while (!EarlyStop && g <= NrPcGens && Wt(g) <= wt) {
u[i].g = g;
u[i].e = (expo)0;
u[i + 1].g = EOW; while (!EarlyStop && Wt(g) <= wt) {
u[i].e++; if (Exponent[g] > (expo)0 && Exponent[g] == u[i].e) break;
wt -= Wt(g);
buildTuple(ul, i + 1, g + 1, wt, which); /* now build the same word with negative exponent */ if (!EarlyStop && !SemigroupOnly && Exponent[g] == (expo)0) {
u[i].g *= -1;
buildTuple(ul, i + 1, g + 1, wt, which);
u[i].g *= -1;
}
}
wt = save_wt;
g++;
}
u[i].g = EOW;
u[i].e = (expo)0; if (EarlyStop || SemigroupOnly || !SemigroupFirst) return;
while (!EarlyStop && g <= NrPcGens && Wt(g) <= wt) {
u[i].g = -g;
u[i].e = (expo)0;
u[i + 1].g = EOW; while (!EarlyStop && Wt(g) <= wt) {
u[i].e++; if (Exponent[g] > (expo)0 && Exponent[g] == u[i].e) break;
wt -= Wt(g);
buildTuple(ul, i + 1, g + 1, wt, which); if (EarlyStop) return; /* now build the same word with negative exponent */ if (!EarlyStop && !SemigroupOnly && Exponent[g] == (expo)0) {
u[i].g *= -1;
buildTuple(ul, i + 1, g + 1, wt, which);
u[i].g *= -1;
}
}
wt = save_wt;
g++;
}
u[i].g = EOW;
u[i].e = (expo)0;
}
void EvalTrMetAb(void) {
word u, ul[6]; int i, c;
if (!TrMetAb) return;
for (i = 0; i < 6; i++)
ul[i] = (word)Allocate((NrPcGens + NrCenGens + 1) * sizeof(gpower));
u = ul[0]; for (i = 1; i <= NrCenGens; i++) {
u[0].g = i;
u[0].e = (expo)1;
u[1].g = EOW;
u[1].e = (expo)0;
eval8Power(u);
}
for (c = 2; !EarlyStop && c <= Class + 1; c++) { for (i = 0; i < 6; i++) {
ul[i][0].g = EOW;
ul[i][0].e = (expo)0;
}
NrWords = 0; if (Verbose)
printf("# Checking tuples of words of weight %d\n", c);
buildTuple(ul, 0, 1, c, 5); if (Verbose) printf("# Checked %d words.\n", NrWords);
}
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 ist noch experimentell.