Annotation of researchv10no/cmd/factor/factor.c, revision 1.1.1.1

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,&quot)==0) {
                     77:                printf("     %.0f\n",p);
                     78:                n = quot;
                     79:        }
                     80:        s = sqrt(n) + 1;
                     81: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.