Weird Algorithm
Problem Statement -
Time limit: 1.00 s
Memory limit: 512 MB
Consider an algorithm that takes as input a positive integer n. If n is even, the algorithm divides it by two, and if n is odd, the algorithm multiplies it by three and adds one. The algorithm repeats this, until n is one. For example, the sequence for n=3 is as follows:
3→10→5→16→8→4→2→13→10→5→16→8→4→2→1
Your task is to simulate the execution of the algorithm for a given value of n.
Input
The only input line contains an integer n.
Output
Print a line that contains all values of n during the algorithm.
Constraints
1 ≤ n ≤ 10^6
Example
Input:
3
Output:
3 10 5 16 8 4 2 1
LOGIC
This problem is based on Collatz conjecture according to which if we are given a positive number n, then, we can get a sequence in which if previous term(let's say n) is even, the next term is n/2. If previous term is odd, next term is 3n+1. The conjecture is that no matter what the value of n, the sequence will always reach 1.
APPROACH
To solve this problem, we will take n as input. Then, we run a while loop until n is not 1 i.e. n is anything but 1. Inside the loop, we check if n is divisible by two, if yes, then next number must be n/2 else next number must be 3n+1. While loop breaks when n is 1.
CODE(C++)
#include <bits/stdc++.h>
using namespace std;
#define ll long long int
int main()
{
ll n;
cin >> n;
cout << n << " ";
while(n != 1)
{
if(n%2 == 0){
n = n/2;
cout << n << " ";
}
else{
n = (n * 3) + 1;
cout << n << " ";
}
}
cout << endl;
}