/* Subprograms and main program, discriminant = 1 mod 4, T. J. Dekker, 2007. */ /* Draws pictures of prime numbers (blue) and prime non-principal ideals (red). */ int bynorm, shift; int radicand[] = { /* non-unique factorization domains, class nr 3: */ - 23, - 31, - 59, - 83, -107, -139, -211, -283, -307, -331, -379, -499, /* -547, -643, -883, -907, /* 229, 257, 321, 469, 473, */ 0}; 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) { if (norm >= maxnorm) drawprim(x, y, &black); /* big */ else if (norm == bynorm) drawprim(x, y, &black); /* reject bynorm */ else if (inset(norm, prinorm)) drawprim (x, y, &blue); /* primes */ else if (norm == 1) drawprim(x, y, &gray); /* units */ else if (norm % bynorm == 0 && inset(norm/bynorm, prinorm)) { /* non-principal ideals in green or red */ if (((x+y)/2 + shift * y) % bynorm != 0) drawprim(x, y, &green); else drawprim(x, y, &red); } } /* end drawitem */ /* end of quad1clas3.c */