diff options
Diffstat (limited to 'src/benchmarks/cfrac/pfactor.c')
| -rw-r--r-- | src/benchmarks/cfrac/pfactor.c | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/src/benchmarks/cfrac/pfactor.c b/src/benchmarks/cfrac/pfactor.c new file mode 100644 index 0000000..6c765d1 --- /dev/null +++ b/src/benchmarks/cfrac/pfactor.c @@ -0,0 +1,55 @@ +#include <stdio.h> +#include "precision.h" +#include "pfactor.h" + +void showfactors(); + + +int main(argc, argv) + int argc; + char *argv[]; +{ + precision n = pUndef; + + --argc; + if (argc != 0) { + do { + pset(&n, atop(*++argv)); + showfactors(n); + } while (--argc > 0); + } else { + do { + pset(&n, fgetp(stdin)); + if (n == pUndef) break; + showfactors(n); + } while (1); + } + pdestroy(n); + return 0; +} + +void showfactors(n) + precision n; +{ + precision r = pUndef; + FactorList factors = (FactorList) 0; + + (void) pparm(n); + pset(&r, ptrial(n, (unsigned *) 0, &factors)); + fputp(stdout, n); + fputs(" = ", stdout); + pputfactors(stdout, factors); + if pne(r, pone) { + if pne(r, n) putc('*', stdout); + if (!pprime(r, 16)) { + fputc('(', stdout); fputp(stdout, r); fputc(')', stdout); + } else { + fputp(stdout, r); + } + } + putc('\n', stdout); + + pfreefactors(&factors); + pdestroy(r); + pdestroy(n); +} |
