From 851597449547251b36e35ee32813e6b1f51415ed Mon Sep 17 00:00:00 2001 From: Charles Cabergs Date: Thu, 13 May 2021 10:06:04 +0200 Subject: Added factor --- src/factor.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 src/factor.c (limited to 'src') diff --git a/src/factor.c b/src/factor.c new file mode 100644 index 0000000..9443fd8 --- /dev/null +++ b/src/factor.c @@ -0,0 +1,51 @@ +#define _POSIX_C_SOURCE 200809L +#include +#include +#include +#include +#include + +int g_status_code = 0; + +void print_factors(const char *s) +{ + char *endptr; + errno = 0; + unsigned long n = strtoul(s, &endptr, 10); + if (errno != 0 || !isdigit(*s) || *endptr != '\0') + { + fprintf(stderr, "factor: '%s': is not a valid positive integer\n", s); + g_status_code = 1; + return; + } + printf("%lu:", n); + while (n > 1) + { + for (unsigned long d = 2; true; d++) + { + if (n % d == 0) + { + printf(" %lu", d); + n /= d; + break; + } + } + } + fputc('\n', stdout); +} + +int main(int argc, char **argv) +{ + if (argc == 1) + { + char *line = NULL; + size_t n = 0; + while (getline(&line, &n, stdin) != -1) + print_factors(line); + free(line); + return g_status_code; + } + for (int i = 1; i < argc; i++) + print_factors(argv[i]); + return g_status_code; +} -- cgit