Mọi người cho em hỏi về cách giải bài Collatz conjecture ạ. Yêu cầu nhập vào 1 số tự nhiên khác 0, nếu số đó là số lẻ thì nhân 3 rồi cộng 1, nếu là số chẵn thì chia 2 cho đến khi gặp được số 1. Viết chương trình C++ cho biết cần bao nhiêu bước để tới được số 1.
Đây là code C++ của mình, khi nhập vào các số trên 2 nghìn tỉ thì kết quả bị sai.
Ví dụ nhập vào số 2 081 751 768 559 thì output đúng phải là 1437 nhưng code của mình chỉ cho ra output là 682.
#include <iostream>
#include <stdint.h>
using namespace std;
typedef unsigned long long uint64;
uint64_t CollatzConjecture(uint64_t n)
{
uint64_t dem = 0;
while (n != 1)
{
n= (n&1) ? n*3+1 : n/2;
cout << n << " ";
dem++;
}
cout<<endl;
return dem;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL) ;
uint64_t n;
cin>>n;
cout<<CollatzConjecture(n);
return 0;
}