58 lines
952 B
Text
58 lines
952 B
Text
void
|
|
print_hailstone(integer h)
|
|
{
|
|
list l;
|
|
|
|
while (h ^ 1) {
|
|
lb_p_integer(l, h);
|
|
h = h & 1 ? 3 * h + 1 : h / 2;
|
|
}
|
|
|
|
o_form("hailstone sequence for ~ is ~1 ~ ~ ~ .. ~ ~ ~ ~, it is ~ long\n",
|
|
l[0], l[1], l[2], l[3], l[-3], l[-2], l[-1], 1, ~l + 1);
|
|
}
|
|
|
|
void
|
|
max_hailstone(integer x)
|
|
{
|
|
integer e, i, m;
|
|
index r;
|
|
|
|
m = 0;
|
|
i = 1;
|
|
while (i < x) {
|
|
integer h, k, l;
|
|
|
|
h = i;
|
|
l = 1;
|
|
while (h ^ 1) {
|
|
if (i_j_integer(k, r, h)) {
|
|
l += k;
|
|
break;
|
|
} else {
|
|
l += 1;
|
|
h = h & 1 ? 3 * h + 1 : h / 2;
|
|
}
|
|
}
|
|
|
|
r[i] = l - 1;
|
|
|
|
if (m < l) {
|
|
m = l;
|
|
e = i;
|
|
}
|
|
|
|
i += 1;
|
|
}
|
|
|
|
o_form("hailstone sequence length for ~ is ~\n", e, m);
|
|
}
|
|
|
|
integer
|
|
main(void)
|
|
{
|
|
print_hailstone(27);
|
|
max_hailstone(100000);
|
|
|
|
return 0;
|
|
}
|