Annotation of researchv10no/cmd/factor/factor.c, revision 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.