new utilities.
the .C files compile but are renamed to avoid building automatically.
This commit is contained in:
parent
f08fdedcee
commit
bc7cb1a15a
45 changed files with 16585 additions and 0 deletions
96
src/cmd/factor.c
Normal file
96
src/cmd/factor.c
Normal file
|
|
@ -0,0 +1,96 @@
|
|||
#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");
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue