1*3e12c5d1SDavid du Colombier #include <u.h>
2*3e12c5d1SDavid du Colombier #include <libc.h>
3*3e12c5d1SDavid du Colombier #include <bio.h>
4*3e12c5d1SDavid du Colombier
5*3e12c5d1SDavid du Colombier #define whsiz (sizeof(wheel)/sizeof(wheel[0]))
6*3e12c5d1SDavid du Colombier
7*3e12c5d1SDavid du Colombier double wheel[] =
8*3e12c5d1SDavid du Colombier {
9*3e12c5d1SDavid du Colombier 2,10, 2, 4, 2, 4, 6, 2, 6, 4,
10*3e12c5d1SDavid du Colombier 2, 4, 6, 6, 2, 6, 4, 2, 6, 4,
11*3e12c5d1SDavid du Colombier 6, 8, 4, 2, 4, 2, 4, 8, 6, 4,
12*3e12c5d1SDavid du Colombier 6, 2, 4, 6, 2, 6, 6, 4, 2, 4,
13*3e12c5d1SDavid du Colombier 6, 2, 6, 4, 2, 4, 2,10,
14*3e12c5d1SDavid du Colombier };
15*3e12c5d1SDavid du Colombier
16*3e12c5d1SDavid du Colombier Biobuf bin;
17*3e12c5d1SDavid du Colombier
18*3e12c5d1SDavid du Colombier void factor(double);
19*3e12c5d1SDavid du Colombier
20*3e12c5d1SDavid du Colombier void
main(int argc,char * argv[])21*3e12c5d1SDavid du Colombier main(int argc, char *argv[])
22*3e12c5d1SDavid du Colombier {
23*3e12c5d1SDavid du Colombier double n;
24*3e12c5d1SDavid du Colombier int i;
25*3e12c5d1SDavid du Colombier char *l;
26*3e12c5d1SDavid du Colombier
27*3e12c5d1SDavid du Colombier if(argc > 1) {
28*3e12c5d1SDavid du Colombier for(i=1; i<argc; i++) {
29*3e12c5d1SDavid du Colombier n = atof(argv[i]);
30*3e12c5d1SDavid du Colombier factor(n);
31*3e12c5d1SDavid du Colombier }
32*3e12c5d1SDavid du Colombier exits(0);
33*3e12c5d1SDavid du Colombier }
34*3e12c5d1SDavid du Colombier
35*3e12c5d1SDavid du Colombier Binit(&bin, 0, OREAD);
36*3e12c5d1SDavid du Colombier for(;;) {
37*3e12c5d1SDavid du Colombier l = Brdline(&bin, '\n');
38*3e12c5d1SDavid du Colombier if(l == 0)
39*3e12c5d1SDavid du Colombier break;
40*3e12c5d1SDavid du Colombier n = atof(l);
41*3e12c5d1SDavid du Colombier if(n <= 0)
42*3e12c5d1SDavid du Colombier break;
43*3e12c5d1SDavid du Colombier factor(n);
44*3e12c5d1SDavid du Colombier }
45*3e12c5d1SDavid du Colombier exits(0);
46*3e12c5d1SDavid du Colombier }
47*3e12c5d1SDavid du Colombier
48*3e12c5d1SDavid du Colombier void
factor(double n)49*3e12c5d1SDavid du Colombier factor(double n)
50*3e12c5d1SDavid du Colombier {
51*3e12c5d1SDavid du Colombier double quot, d, s;
52*3e12c5d1SDavid du Colombier int i;
53*3e12c5d1SDavid du Colombier
54*3e12c5d1SDavid du Colombier print("%.0f\n", n);
55*3e12c5d1SDavid du Colombier if(n == 0)
56*3e12c5d1SDavid du Colombier return;
57*3e12c5d1SDavid du Colombier s = sqrt(n) + 1;
58*3e12c5d1SDavid du Colombier while(modf(n/2, ") == 0) {
59*3e12c5d1SDavid du Colombier print(" 2\n");
60*3e12c5d1SDavid du Colombier n = quot;
61*3e12c5d1SDavid du Colombier s = sqrt(n) + 1;
62*3e12c5d1SDavid du Colombier }
63*3e12c5d1SDavid du Colombier while(modf(n/3, ") == 0) {
64*3e12c5d1SDavid du Colombier print(" 3\n");
65*3e12c5d1SDavid du Colombier n = quot;
66*3e12c5d1SDavid du Colombier s = sqrt(n) + 1;
67*3e12c5d1SDavid du Colombier }
68*3e12c5d1SDavid du Colombier while(modf(n/5, ") == 0) {
69*3e12c5d1SDavid du Colombier print(" 5\n");
70*3e12c5d1SDavid du Colombier n = quot;
71*3e12c5d1SDavid du Colombier s = sqrt(n) + 1;
72*3e12c5d1SDavid du Colombier }
73*3e12c5d1SDavid du Colombier while(modf(n/7, ") == 0) {
74*3e12c5d1SDavid du Colombier print(" 7\n");
75*3e12c5d1SDavid du Colombier n = quot;
76*3e12c5d1SDavid du Colombier s = sqrt(n) + 1;
77*3e12c5d1SDavid du Colombier }
78*3e12c5d1SDavid du Colombier d = 1;
79*3e12c5d1SDavid du Colombier for(i=1;;) {
80*3e12c5d1SDavid du Colombier d += wheel[i];
81*3e12c5d1SDavid du Colombier while(modf(n/d, ") == 0) {
82*3e12c5d1SDavid du Colombier print(" %.0f\n", d);
83*3e12c5d1SDavid du Colombier n = quot;
84*3e12c5d1SDavid du Colombier s = sqrt(n) + 1;
85*3e12c5d1SDavid du Colombier }
86*3e12c5d1SDavid du Colombier i++;
87*3e12c5d1SDavid du Colombier if(i >= whsiz) {
88*3e12c5d1SDavid du Colombier i = 0;
89*3e12c5d1SDavid du Colombier if(d > s)
90*3e12c5d1SDavid du Colombier break;
91*3e12c5d1SDavid du Colombier }
92*3e12c5d1SDavid du Colombier }
93*3e12c5d1SDavid du Colombier if(n > 1)
94*3e12c5d1SDavid du Colombier print(" %.0f\n",n);
95*3e12c5d1SDavid du Colombier print("\n");
96*3e12c5d1SDavid du Colombier }
97