// // factor -- Perform prime factorization on one or a range of integers. // // 10-Sep-2010 tvb www.LeapSecond.com/tools // #include #include void factor (long N) { char c; long e, f, n, i; if (N < 2) return; printf("%ld", N); c = '='; e = 0; n = N; for (f = 2; f <= n / f; f += i) { while ((n % f) == 0) { n /= f; e += 1; } if (e != 0) { printf(" %c %ld", c, f); if (e > 1) { printf("^%ld", e); } c = '*'; e = 0; } i = (f > 2) ? 2 : 1; } if (n == N) { printf(" prime"); } else if (n != 1) { printf(" %c %ld", c, n); } printf("\n"); } void main (int argc, char *argv[]) { long n, m; if (argc < 2 || argc > 3) { fprintf(stderr, "Usage: factor number [limit]\n"); exit(1); } if (argc >= 2) { n = m = atol(argv[1]); } if (argc >= 3) { m = atol(argv[2]); } for ( ; n <= m; n += 1) { factor(n); } }