sexta-feira, 16 de fevereiro de 2018

Project Euler 14

Esse problema do Project Euler é sobre a Conjectura de Collatz.



Clear-Host
[int]$maxNumTerm = 0
[int]$numComMaisTerm = 0
$cache = -1000000..0

For ([int]$num=1; $num -lt 1000000; $num++) {
    [long]$curNum = $num
    [int]$curNumTerm = 1
    #Write-Host "Numero atual: " $curNum
    While (($curNum -gt 1) -and ($cache[$curNum] -lt 0)) {
        If ($curNum % 2 -eq 0) {
        ## even
            $curNum = $curNum / 2
        }
        Else {
            ## odd
            $curNum = 3 * $curNum + 1
        }
        If ($cache[$curNum] -gt 0) {
            $curNumTerm+=$cache[$curNum]
            Break
        }
        Else {
            $curNumTerm++
        }
        ##Write-Host $curNum
    }
    $cache[$num] = $curNumTerm
    If ($curNumTerm -gt $maxNumTerm) {
        $maxNumTerm = $curNumTerm
        $numComMaisTerm = $num
        Write-Host "O número que tem mais termos é $numComMaisTerm com $maxNumTerm"
    }
}


A verdade é que não consegui performance satisfatória com esse código. Chega-se ao resultado, mas leva um bom tempo.

O número que tem mais termos é 2223 com 183
O número que tem mais termos é 2463 com 209
O número que tem mais termos é 2919 com 217
O número que tem mais termos é 3711 com 238
O número que tem mais termos é 6171 com 262
O número que tem mais termos é 10971 com 268
O número que tem mais termos é 13255 com 276
O número que tem mais termos é 17647 com 279
O número que tem mais termos é 23529 com 282
O número que tem mais termos é 26623 com 308
O número que tem mais termos é 34239 com 311
O número que tem mais termos é 35655 com 324
O número que tem mais termos é 52527 com 340
O número que tem mais termos é 77031 com 351
O número que tem mais termos é 106239 com 354
O número que tem mais termos é 142587 com 375
O número que tem mais termos é 156159 com 383
O número que tem mais termos é 216367 com 386
O número que tem mais termos é 230631 com 443
O número que tem mais termos é 410011 com 449
O número que tem mais termos é 511935 com 470
O número que tem mais termos é 626331 com 509
O número que tem mais termos é 837799 com 525

Nenhum comentário:

Postar um comentário