Blame


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