#include <u.h> | |
#include <libc.h> | |
#include <bio.h> | |
#define whsiz (sizeof(wheel)/sizeof(wheel[0])) | |
double wheel[] = | |
{ | |
2,10, 2, 4, 2, 4, 6, 2, 6, 4, | |
2, 4, 6, 6, 2, 6, 4, 2, 6, 4, | |
6, 8, 4, 2, 4, 2, 4, 8, 6, 4, | |
6, 2, 4, 6, 2, 6, 6, 4, 2, 4, | |
6, 2, 6, 4, 2, 4, 2,10, | |
}; | |
Biobuf bin; | |
void factor(double); | |
void | |
main(int argc, char *argv[]) | |
{ | |
double n; | |
int i; | |
char *l; | |
if(argc > 1) { | |
for(i=1; i<argc; i++) { | |
n = atof(argv[i]); | |
factor(n); | |
} | |
exits(0); | |
} | |
Binit(&bin, 0, OREAD); | |
for(;;) { | |
l = Brdline(&bin, '\n'); | |
if(l == 0) | |
break; | |
n = atof(l); | |
if(n <= 0) | |
break; | |
factor(n); | |
} | |
exits(0); | |
} | |
void | |
factor(double n) | |
{ | |
double quot, d, s; | |
int i; | |
print("%.0f\n", n); | |
if(n == 0) | |
return; | |
s = sqrt(n) + 1; | |
while(modf(n/2, ") == 0) { | |
print(" 2\n"); | |
n = quot; | |
s = sqrt(n) + 1; | |
} | |
while(modf(n/3, ") == 0) { | |
print(" 3\n"); | |
n = quot; | |
s = sqrt(n) + 1; | |
} | |
while(modf(n/5, ") == 0) { | |
print(" 5\n"); | |
n = quot; | |
s = sqrt(n) + 1; | |
} | |
while(modf(n/7, ") == 0) { | |
print(" 7\n"); | |
n = quot; | |
s = sqrt(n) + 1; | |
} | |
d = 1; | |
for(i=1;;) { | |
d += wheel[i]; | |
while(modf(n/d, ") == 0) { | |
print(" %.0f\n", d); | |
n = quot; | |
s = sqrt(n) + 1; | |
} | |
i++; | |
if(i >= whsiz) { | |
i = 0; | |
if(d > s) | |
break; | |
} | |
} | |
if(n > 1) | |
print(" %.0f\n",n); | |
print("\n"); | |
} |