|
|
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.