古老的传说。。。。。。。。
/*问题描述:
这是一个古老的猜想:给定任何一个正整数n,对它进行以下操作:
n是偶数:n=n/2
n是奇数:n=3*n+1
这样经过多步操作后,最后必定变为1
如对13进行操作: 13 -> 40 -> 20 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 -> 1
一共经历了9次操作,则称13这个数的周期是9
输入:
多组测试数据,每组一行,一行里有两个数m和n,
请你找出m和n之间(包括m,n)的周期最大的数的周期
其中m,n均为小于或者等于1e5的正整数
输出:
m,n之间周期最大的数的周期,一个结果单独占一行
*/
#include <stdio.h>
#define MAX 100000
int count1( long int a, long int *aa);
int main(void)
{
long int a, b, m1, m2;
static long int aa[MAX] = {0};
scanf("%ld %ld", &a, &b);
m1 = count1(a, aa);
m2 = count1(b, aa);
printf("%ld", (m1 > m2 ? m1 : m2));
}
int count1(long int a, long int *aa) {
int i = 0;
long int temp = a;
while (temp != 1) {
if (temp % 2 == 0) {
temp = temp / 2;
}
else {
temp = 3 * temp + 1;
}
if (aa[temp] == 0) {
i++;
}
else {
i += aa[temp];
}
}
aa[a] = i;
return i;
}