aboutsummaryrefslogtreecommitdiff
path: root/src/benchmarks/cfrac/pfactor.c
blob: 6c765d15876a7d1c32c1d89620650a07d6f6262f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
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);
}