17.4.8.3n+1猜想、考拉茲猜想
阿新 • • 發佈:2018-12-31
瞭解 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
****************************************************************/