|
|
1.1 root 1: #include <math.h>
2:
3: extern double modf();
4:
5: #ifdef pdp11
6: #define setfps() ldfps(0240) /* double, chop */
7: #define ifdiv(d,n) if((n/d)*d==n)
8:
9: #else
10: #define setfps()
11:
12: #ifdef vax
13: #define ifdiv(d,n) junk = n/d;\
14: asm(" emodd _junk,$0,$0f1.0,r0,_junk");\
15: if(junk==0.)
16: #else
17: #define ifdiv(d,n) if(modf(n/d,&junk)==0.)
18: #endif
19:
20: #endif
21:
22: double wheel[] = {
23: 2,10, 2, 4, 2, 4, 6, 2, 6, 4,
24: 2, 4, 6, 6, 2, 6, 4, 2, 6, 4,
25: 6, 8, 4, 2, 4, 2, 4, 8, 6, 4,
26: 6, 2, 4, 6, 2, 6, 6, 4, 2, 4,
27: 6, 2, 6, 4, 2, 4, 2,10,
28: };
29: double n;
30: double d;
31: double junk;
32: double s;
33:
34: main(argc,argv)
35: char **argv;
36: {
37: extern double atof();
38: register double *wheelp;
39: if(argc>1)
40: n = atof(argv[1]);
41: setfps();
42: do {
43: if(argc<=1 && scanf("%lf",&n)<=0)
44: break;
45: if(n<=0)
46: break;
47: printf("%.0f\n",n);
48: s = sqrt(n) + 1;
49: try(2.);
50: try(3.);
51: try(5.);
52: try(7.);
53: d = 1.;
54: wheelp = &wheel[1];
55: for(;;) {
56: d += *wheelp;
57: ifdiv(d,n)
58: try(d);
59: if(++wheelp >= wheel + sizeof(wheel)/sizeof(*wheel)) {
60: wheelp = wheel;
61: if(d>s)
62: break;
63: }
64: }
65: if(n>1)
66: printf(" %.0f\n",n);
67: printf("\n");
68: } while(argc<=1);
69: return(0);
70: }
71:
72: try(p)
73: double p;
74: {
75: static double quot;
76: while(modf(n/p,")==0) {
77: printf(" %.0f\n",p);
78: n = quot;
79: }
80: s = sqrt(n) + 1;
81: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.