using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Teorema_de_Collatz
{
class Program
{
static void Main(string[] args)
{
//AUTORIA DE PAULO ESTEVÃO PAULI- TEOREMA DE COLLATZ
ulong n = 0;
ulong calculos = 0;
ulong procchave = 0;
ulong primenqn = 0;
ulong trocador = 0;
ulong sinal = 0;
ulong n_inicial = 0;
ulong n_final = 0;
ulong diferenca = 0;
ulong n_calc = 0;
ulong i = 0;
//ENTRADA DE UM VALOR QUALQUER POSITIVO E INTEIRO
Console.WriteLine(" ---------------------------------------------------------------- ");
Console.WriteLine(" | | ");
Console.Write(" | Entre com o número inicial: ");
n_inicial = ulong.Parse(Console.ReadLine());
Console.WriteLine(" | | ");
Console.Write(" | Entre com o número final: ");
n_final = ulong.Parse(Console.ReadLine());
Console.WriteLine(" | | ");
Console.Write(" | Entre com o número de cálculos: ");
n_calc = ulong.Parse(Console.ReadLine());
Console.WriteLine(" | | ");
Console.WriteLine(" ---------------------------------------------------------------- ");
for (i = n_inicial; i < n_final; i++)
{
n = 0;
trocador = 0;
sinal = 0;
calculos = 0;
procchave = 0;
primenqn = 0;
diferenca = 0;
// MANUTENÇÃO DO VALOR INICIAL
n = i;
trocador = n;
// INÍCIO DA ROTINA DE VERIFICAÇÃO DOS NÚMEROS PARES E ÍMPARES
do
{
if (n % 2 == 0)
// CÁLCULOS DOS PARES
{
n = n / 2;
calculos++;
}
else
// CÁLCULOS DOS ÍMPARES
{
n = n * 3 + 1;
calculos++;
}
// NÚMERO CHAVE procchave É O PRIMEIRO MENOR QUE O INICIAL
if (trocador > n)
{
sinal++;
}
if ((sinal == 1) && (trocador > n))
{
primenqn = n;
procchave = calculos;
if (n_calc == procchave)
{
Console.WriteLine(" Número inicial escolhido..: " + trocador + " Número chave encontrado...: " + primenqn + " - ");
}
}
// FINAL DA ROTINA DE VERIFICAÇÃO DOS PARES E ÍMPARES
} while (n > 1);
}
Console.WriteLine(" ---------------------------------------------------------------- ");
Console.WriteLine(" | | ");
Console.WriteLine(" | Aperte uma tecla qualquer para sair! | ");
Console.WriteLine(" | | ");
Console.WriteLine(" ---------------------------------------------------------------- ");
//AGUARDAR UMA TECLA PARA SAIR
Console.ReadKey();
}
}
}