Olá pessoal,
Essa é para os matemáticos. :)
Estou trabalhando na solução de um problema (desafio de programação), mas o algoritmo que escrevi tem complexidade n^5, o que inviabiliza sua execução mesmo para valores pequenos de entrada.
O que preciso é realizar o somatório de múltiplos somatórios (a função está em anexo).
BigInteger n = new BigInteger( "20" );
BigInteger soma = BigInteger.ZERO;
for ( BigInteger i = BigInteger.ONE; !(i.compareTo( n ) > 0); i = i.add( BigInteger.ONE ) ) {
for ( BigInteger j = BigInteger.ONE; !(j.compareTo( n ) > 0); j = j.add( BigInteger.ONE ) ) {
for ( BigInteger k = BigInteger.ONE; !(k.compareTo( n ) > 0); k = k.add( BigInteger.ONE ) ) {
for ( BigInteger l = BigInteger.ONE; !(l.compareTo( n ) > 0); l = l.add( BigInteger.ONE ) ) {
for ( BigInteger m = BigInteger.ONE; !(m.compareTo( n ) > 0); m = m.add( BigInteger.ONE ) ) {
soma = soma.add( ( i.subtract( j ).multiply( j.subtract( k ).multiply( k.subtract( l ).multiply( l.subtract( m ).multiply( m.subtract( i ) ) ) ) ) ).abs() );
}
}
}
}
}
0
0
120
3200
35160
237120
1164800
4572160
15174720
44200640
115961560
279227520
625888120
[telefone removido]
[telefone removido]
[telefone removido]
[telefone removido]
[telefone removido]
[telefone removido]
[telefone removido]
Já procurei bastante. O WolframAlpha só me retorna resultados para dois somatórios consecutivos. A partir do terceiro ele já não resolve, não entende o que estou pedindo. Se alguém tiver o Mathematica ou o MATLab e puder avaliar a expressão para mim, vendo se sugerem alguma simplificação, eu agradeço.
Se alguém quiser dar uma olhada no problema, é esse aqui: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=3295
[]'s

