aboutsummaryrefslogtreecommitdiff
path: root/src/benchmarks/cfrac/pfactor.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/benchmarks/cfrac/pfactor.c')
-rw-r--r--src/benchmarks/cfrac/pfactor.c55
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);
+}