/* Sub- and main programs, fields class nr = 3, d = 0 mod 4, T J Dekker, 2007. */ /* Draws pictures of prime numbers (red) and prime non-principal ideals (green) */ /* obtained by dividing by non-principal ideal of norm 2. */ /* main program moreover uses subprograms from files quadchar.c and sievquad.c. */ /* DrawUnit.c defines 'Initialize' and, by inclusion, drawing subprograms used. */ /* class nr == 3, bynorm 3 is not norm of principal ideal */ int radicand[]= {79, 142, 223, 254, 326, 359, 0}; int bynorm, shift; void showitem() { char it[30]; int i, k; int natp[] = {2, 3, 5, 7, 11, 13}; for (i = 0; i < 6 && qchar[natp[i]] <= 0; i++) ; bynorm = natp[i]; for (k = 0; k < 100 && QNORM(k, 1) % bynorm != 0; k++) ; shift = k; RGBForeColor(&blue); sprintf(it, " prime numbers "); drawstring(it); RGBForeColor(&gray); sprintf(it, " units "); drawstring(it); RGBForeColor(&green); sprintf(it, " prime ideals "); drawstring(it); RGBForeColor(&red); sprintf(it, "by norm %d shift %d", bynorm, shift); drawstring(it); RGBForeColor(&black); } /* end showitem */ void drawitem(int x, int y, int norm) /* draws prime and unit of field for discriminant discr % 4 == 0 */ { if (norm >= maxnorm) drawprim(x, y, &black); /* too large */ else if (norm == bynorm) drawprim(x, y, &black); /* reject bynorm */ else if (inset(norm, prinorm)) drawprim(x, y, &blue); /* primes blue */ else if (norm == 1) drawprim(x, y, &gray); /* draw unit gray */ else /* draw non-principal ideals in green or red color */ if (norm % bynorm == 0 && inset(norm/bynorm, prinorm)) { if ((x + shift * y) % bynorm != 0) drawprim(x, y, &green); else drawprim(x, y, &red); } } /* end drawitem */