mirror of
https://github.com/9fans/plan9port.git
synced 2025-01-15 11:20:03 +00:00
bc7cb1a15a
the .C files compile but are renamed to avoid building automatically.
96 lines
1.3 KiB
C
96 lines
1.3 KiB
C
#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");
|
|
}
|