Se os axiomas são 2 primos, então teremos teoremas que são multiplos desses 2 primos na forma A^n * B^m = Z.
Se for pedido o numero na posição P tal que 3^n * 5^m = Z:
Quais os valores de 'n', 'm' e Z?
Nesse estudo, tentaremos encontrar um algoritmo de busca de um numero com base no seu numero de primos e a posição P (cardinalidade) tal que A^n * B^m = Z.
Se por hipotese 3 e 5 sao as bases que compoem os teoremas:
1,
3,
5,
3*3,
3*5,
5*5,
3*3*3,
3*3*5,
3*5*5,
5*5*5,
3*3*3*3,
3*3*3*5,
3*3*5*5,
3*5*5*5,
5*5*5*5,
3*3*3*3*3,
3*3*3*3*5,
3*3*3*5*5,
3*3*5*5*5,
3*5*5*5*5,
5*5*5*5*5,
3*3*3*3*3*3,
3*3*3*3*3*5,
3*3*3*3*5*5,
3*3*3*5*5*5,
3*3*5*5*5*5,
3*5*5*5*5*5,
5*5*5*5*5*5,...
Como foi observado, existe uma relação entre a quantidade de digitos utilizado 'k' e o numero de numeros possiveis de se contruir 'k+1'.
Note que podemos ter teoremas tais que
1) A^m * B^0 > A^0 * B^n
Exemplo: 3*3*3*3 < 5*5*5
2) A^m * B^0 < A^0 * B^n
Exemplo: 3*3*3 > 5*5
Portanto deve existir um numero de virada 'k' tal que 3^k = 5^(k-1). Buscando 'k':
k * ln(3) = (k-1) * ln(5)
k * ln(3) - (k-1) * ln(5) = 0
supondo que ln(5) = v*ln(3) temos:
k * ln(3) - (k-1) * v*ln(3) = 0
(k-vk+v)ln(3)=0
(k-vk+v)=0
k(1-v)+v=0
k=v/(v-1) tal que v = ln(5)/ln(3) temos:
o ponto de virada seria:
k=3.150660103087125
teste:
k * ln(3) = (k - 1) * ln(5)
3.150660103087125 * ln(3) = 2.150660103087125 * ln(5)
se k=3.150660103087125
3.461353906667849 = 3.461353906667849
se k<3.150660103087125 : exemplo k=3.1506601030871
3.4613539066678216 > 3.461353906667809
se k<3.150660103087125 : exemplo k=3.15066010308713
3.4613539066679313 < 3.46135390666797
script para verificação:
//===================================================
<script>
var v = Math.log(5) / Math.log(3)
var k=v/(v-1);
document.write( "para k = "+k +"</br>")
document.write( (k * Math.log(3)) +" = "+ ((k-1) * Math.log(5)) +"</br></br>")
var k1= k - 0.0000000000001
document.write( "para k = "+k1 +"</br>")
document.write( (k1 * Math.log(3)) +" > "+ ((k1-1) * Math.log(5)) +"</br></br>")
var k2= k + 0.0000000000001
document.write( "para k = "+k2 +"</br>")
document.write( (k2 * Math.log(3)) +" < "+ ((k2-1) * Math.log(5)) +"</br></br>")
</script>
//============================================
Encontramos um 'k' que não é inteiro, e precisamos estabelecer um limite na inteiro para dizermos se ou 3^k < 5^(k-1) ou 3^k > 5^(k-1)
Isso divide nosso seguimento de buisca em 3 partes tal que nossas funções f1, f2 e f3 devem ser:
f1(n) se nº digitos < k-1
f2(n) se nº digitos > k-1 e nº digitos < k+1 <= região crítica.
f3(n) se nº digitos > k+1
f1(n) f2(n) f3(n)
-----------o----------o-------------
(k-1) (k+1)
//===================================================
<script>
// ponto de virada
var virada = Math.log(5) / Math.log(3) ;
// esta função é para mudança de base.
function logVirada(v)
{
return Math.log(v) / Math.log( virada ) ;
}
// mudaremos as bases de 5 e 3 para que possamos colocar os numeros sob uma mesma base.
var k = logVirada(5)/logVirada(3)
// maior numero escrito será guardado nesta variavel.
var maiorNumero=0;
// inicio do laço de repetição que coloca cada linha no triangulo.
// de linha i indo de zero a 10 com incremento de 1 em cada passo.
for(var i=0; i<10; i+=1)
{
document.write( i+ " digitos: ") ;
// inicio do laço de repetição que coloca cada elemento da linha.
// da posicao j indo de zero a i com incremento de 1 em cada passo.
for(var j=0; j<=i; j++)
{
// n é o valor que eleva 3
n=i-j;
// m é o valor que eleva 5
m=j;
// Math.pow( base, potencia );
resp = Math.round( Math.pow( virada, (m*k + n)*logVirada(3) ) ) ;
// verificando as cores
//se esse for o maior numero escrito guarda e finalmente escreve
if( maiorNumero < resp)
{
maiorNumero = resp;
document.write( " "+resp ) ;
}
else // se não escreve de vermelho
{
document.write( "<font color='ff0000'>"+ resp +"</font> ") ;
}
}
document.write( "</br></br>") ;
}
</script>
//============================================
Imagem obtida e comentada:
Nenhum comentário:
Postar um comentário