Photolog
Back to list of problems
Ackermann Functions
371.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define MIN(x,y) ((x) < (y) ? (x) : (y))
#define MAX(x,y) ((x) > (y) ? (x) : (y))
int length(int len, long num)
{
if (num<=0) {
return len;
} else if ((num==1) && (len!=0)) {
return len;
} else if (num%2) {
return length(len+1, 3*num+1);
} else {
return length(len+1, num/2);
}
}
int main(int argc, char *argv[])
{
char buf[1024];
while(fgets(buf, 1024, stdin)) {
long a, b;
long i;
int li;
long max;
int lmax;
if (sscanf(buf, "%ld %ld", &a, &b) != 2 ) {
exit(1);
}
max=0;
lmax=0;
if (a==0 && b==0) {
exit(0);
}
for(i=MIN(a,b); i<=MAX(a,b); i++) {
li = length(0,i);
if (li>lmax) {
max=i;
lmax=li;
}
}
printf("Between %ld and %ld, %ld generates the longest sequence of %d values.\n",
MIN(a,b), MAX(a,b), max, lmax);
}
exit(0);
}









