/* The following loop is executed once only if inter = 0 (Checking relations for P). If inter=1, it is executed once for each Sylow intersection Q in the file inf1 (=gpname.sc?).
*/ while (1) { if (inter) {
fscanf(ip, "%hd", &intexp); if (intexp == 0) {
subfile[0]++;
subfile[2] = 'a'; continue;
} if (intexp == -1) break; if (intexp >= exp) {
fprintf(stderr, "Sylow intersection too large.\n"); return (-1);
}
seeknln();
seeknln(); /* Read generators of Q and compute matrices */ for (i = 1; i <= intexp; i++) {
fscanf(ip, "%hd", &l);
l /= 2;
ptr = ptre = cp; for (j = 1; j <= l; j++) {
fscanf(ip, "%hd%hd", &m, &n); if (m <= 0 || m > exp || n <= 0 || n > prime) {
fprintf(stderr, "Invalid data in %s.\n", inf1); return (-1);
}
ptre += n; while (++ptr <= ptre)
*ptr = m;
ptr = ptre;
}
*cp = ptre - cp;
prod(cp, mat[exp + i]);
} if (opmats) {
strcpy(outf, inf1);
strncat(outf, subfile, 1);
strcat(outf, "mats");
op = fopen(outf, "w");
fprintf(op, "%4d%4d%4d\n", prime, dim, intexp); for (i = 1; i <= intexp; i++)
printmat(mat[exp + i]);
fclose(op);
} /* Skip rest of data for this Q */
k = 3 + intexp * (intexp + 1) / 2; for (i = 1; i <= k; i++)
seeknln();
}
/* The following loop (restart) is executed once for each file of inf1xa, inf1xb,... of subgroups of Q.
*/
restart:
strcpy(infc, inf1);
strcat(infc, subfile); if ((ips = fopen(infc, "r")) == 0) /* No more files of subgroups. */
{ if (inter == 0) break;
subfile[0]++;
subfile[2] = 'a'; continue;
}
fscanf(ips, "%hd%hd", &subexp, &substeps); if (subexp <= 0 || subexp > intexp) {
fprintf(stderr, "Invalid data in %s.\n", infc); return (-1);
}
printf("File %s: substeps=%d.\n", infc, substeps); for (i = 1; i <= subexp; i++) { if (subexp == intexp) {
*cp = 1;
cp[1] = i + incr;
} else {
fscanf(ips, "%hd", &l);
l /= 2;
ptr = ptre = cp; for (j = 1; j <= l; j++) {
fscanf(ips, "%hd%hd", &m, &n); if (m <= 0 || m > intexp || n <= 0 || n > prime) {
fprintf(stderr, "Invalid data in %s.\n", infc); return (-1);
}
ptre += n; while (++ptr <= ptre)
*ptr = m + incr;
ptr = ptre;
}
*cp = ptre - cp;
}
prod(cp, mat[2 * exp + i]);
}
for (i = 1; i <= dim; i++) { for (j = 1; j <= dim; j++)
commer[i][j] = 0;
commer[i][i] = 1;
}
ncommer = dim; for (subdp = 1; subdp <= substeps; subdp++) {
ncomm = 0; for (i = 1; i <= dim; i++)
commno[i] = 0; for (i = 1; i <= ncommer; i++) for (j = 1; j <= subexp; j++) {
k = comm(commer[i], commvec, mat[2 * exp + j]); if (subdp == substeps) { if (k != 0) {
fprintf(stderr, "Error: subdp,i,j, inf=%d,%d,%d,%s\n", subdp,
i, j, infc);
subfile[1 + inter]++;
fclose(ips); goto restart;
}
} else {
ptr = commvec + dim + 1; for (k = dim; k >= 1; k--) if ((l = *(--ptr)) != 0) {
n = pinv[l]; for (m = k; m >= 1; m--) {
*ptr *= n;
*(ptr--) %= prime;
} if ((n = commno[k]) != 0) {
ptr = commvec + k;
ptr2 = commkeep[commno[k]] + k; while (ptr > commvec) {
*(ptr) -= *ptr2; if (*ptr < 0)
*ptr += prime;
ptr--;
ptr2--;
}
ptr = commvec + k;
} else {
ncomm++;
commno[k] = ncomm;
ptr = commkeep[ncomm];
ptre = ptr + dim;
ptr2 = commvec; while (++ptr <= ptre)
*ptr = *(++ptr2); break;
}
}
}
}
if (subdp < substeps) {
fscanf(ips, "%hd", &i); if (i != 0) {
subexp = i; if (subexp <= 0 || subexp > intexp) {
fprintf(stderr, "Invalid data in %s.\n", infc); return (-1);
} for (i = 1; i <= subexp; i++) { if (subexp == intexp) {
*cp = 1;
cp[1] = i + incr;
} else {
fscanf(ips, "%hd", &l);
l /= 2;
ptr = ptre = cp; for (j = 1; j <= l; j++) {
fscanf(ips, "%hd%hd", &m, &n); if (m <= 0 || m > intexp || n <= 0 || n > prime) {
fprintf(stderr, "Invalid data in %s.\n", infc); return (-1);
}
ptre += n; while (++ptr <= ptre)
*ptr = m + incr;
ptr = ptre;
}
*cp = ptre - cp;
}
prod(cp, mat[2 * exp + i]);
}
} for (i = 1; i <= ncomm; i++) {
ptr = commer[i];
ptre = ptr + dim;
ptr2 = commkeep[i]; while (++ptr <= ptre)
*ptr = *(++ptr2);
}
ncommer = ncomm;
}
}
printf("File %s is ok.\n", infc);
fclose(ips);
subfile[1 + inter]++; goto restart;
}
}
void seeknln(void)
{ while (getc(ip) != '\n')
;
}
Messung V0.5
¤ Dauer der Verarbeitung: 0.13 Sekunden
(vorverarbeitet)
¤
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.