|  | #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"); | 
|  | } |