了解 3n+1 猜想
Problem E: 六队-Guess the maximum and minimum
Description
Utopian发现了一个很有趣的数字游戏。
任意给定一个自然数n,按照下列规则进行变换:
如果n为偶数,n = n/2
如果n为奇数,n = 3*n+1
试猜测在变换过程中最大的n与最小的n? 并试求出从给定的n到最小的n的最少变换次数?
Input
包含多组数据。
每组数据给定一个任意的n,保证 int 类型
Output
输出三个数max,min,times。分别表示最大值,最小值,最少变换次数
Sample Input
3
9
27
Sample Output
16 1 7
52 1 19
9232 1 111
HINT
数据组数在10万左右
暂无测试数据
分析:
考拉兹猜想(英语:Collatz conjecture),又称为奇偶归一猜想、3n+1猜想、冰雹猜想、角谷猜想、哈塞猜想、乌拉姆猜想或叙拉古猜想,是指对于每一个正整数,如果它是奇数,则对它乘3再加1,如果它是偶数,则对它除以2,如此循环,最终都能够得到1。
计算的话,先套一个while把偶数处理了 再嵌套while处理数字直到为1
#include<iostream>
#include<cstdio>
#define LL long long
#define Max(a,b) (((a)>(b))?(a):(b))
using namespace std;
int main()
{
LL n,maxn,ti;
while(scanf("%lld",&n)!=EOF)
{
maxn=n;ti=0;
while(n%2==0) n=n>>1,ti++;
while(n!=1)
{
n=3*n+1;
maxn=Max(maxn,n);
ti++;
while(n%2==0) n=n>>1,ti++;
}
if(maxn<4) maxn=4;
printf("%lld 1 %lld\n",maxn,ti);
}
return 0;
}
/**************************************************************
Problem: 1732
User: zjut_22
Language: C++
Result: Accepted
Time:224 ms
Memory:1672 kb
****************************************************************/