Página 1 de 2

Números especiais

MensagemEnviado: Segunda Fev 09, 2009 11:16 pm
por Bruno Oliveira
Project Euler: Problem 30

Surpreendentemente, existem apenas 3 números que podem ser escritos como a soma da quarta potência dos seus dígitos e eles são:

1634=1^4+6^4+3^4+4^4

8208=8^4+2^4+0^4+8^4

9474=9^4+4^4+7^4+4^4

A soma destes 3 números é: 1634+8208+9474=19316

O desafio é encontrar a soma de todos os números que podem ser escritos como a soma da quinta potência dos seus dígitos :roll:

Re: Números especiais

MensagemEnviado: Segunda Fev 09, 2009 11:27 pm
por jap
Giro. Não me parece muito difícil...quem quer tentar resolvê-lo pitonicamente? :P

Re: Números especiais

MensagemEnviado: Terça Fev 10, 2009 1:13 am
por Ivo_Timóteo
Esse eu já "limpei" :)

Mas não foi nada pitónico :lol:

Re: Números especiais

MensagemEnviado: Terça Fev 10, 2009 6:30 pm
por Bruno Oliveira
Pois eu estou desesperado, experimentei fazer tal e qual o que diz o problema, fazer que um numero é igual á soma dos seus dígitos elevados á quinta potência, com as strings, mas tinha de andar a alterar os números, por causa do comprimento deles, depois obtive uma lista e grande e tentei somá-los...bad luck :twisted:

Re: Números especiais

MensagemEnviado: Terça Fev 10, 2009 6:54 pm
por jap
Bruno Oliveira Escreveu:Pois eu estou desesperado, experimentei fazer tal e qual o que diz o problema, fazer que um numero é igual á soma dos seus dígitos elevados á quinta potência, com as strings, mas tinha de andar a alterar os números, por causa do comprimento deles...:


Hum? Não tens de te preocupar com o comprimento, de certeza, posta aqui o código e explica o que pretendes fazer que a gente pitoniza-o aqui. :wink:

Re: Números especiais

MensagemEnviado: Terça Fev 10, 2009 7:23 pm
por jap
Ivo, quanto é que te deu o resultado do problema? :roll:

Eu obtive 443840 (contando com 0 e 1 que me parece que também satisfazem as condições do enunciado). Confere com o teu resultado? :roll:

Re: Números especiais

MensagemEnviado: Terça Fev 10, 2009 7:34 pm
por Bruno Oliveira
Entretanto desisti do código, estava já muito baralhado e decidi apagar para começar a pensar de novo só que depois nem tive tempo... :twisted:

Re: Números especiais

MensagemEnviado: Terça Fev 10, 2009 7:46 pm
por jap
O resultado do meu programa (originalmente era uma única linha de python, mas já o descomprimi para ficar mais legível, e porque o Ivo não gosta de oneliners :lol:) é:

Código: Seleccionar Todos
% python p5.py
Maximum number of digits to search 6
Please wait...
The numbers are [0, 1, 4150, 4151, 54748, 92727, 93084, 194979]
and their sum is 443840

Re: Números especiais

MensagemEnviado: Terça Fev 10, 2009 7:47 pm
por Bruno Oliveira
Prof. de facto tanto o 0 como o 1, satisfazem as condições do problema, mas eles dizem para não contar com o 1, pois é uma soma de dígitos, então a resposta é 443839.

As1 = 1^4 is not a sum it is not included.

Re: Números especiais

MensagemEnviado: Terça Fev 10, 2009 7:50 pm
por jap
Bruno Oliveira Escreveu:Prof. de facto tanto o 0 como o 1, satisfazem as condições do problema, mas eles dizem para não contar com o 1, pois é uma soma de dígitos, então a resposta é 443839,de facto é estranho, pois esta resposta conta com o 0 que obviamente está nas mesmas condições do 1 e não deveria ser contado... :twisted:

As1 = 1^4 is not a sum it is not included.


Bem, eu tenderia a generalizar o conceito de "soma" :lol:, mas se eles entendem que não é para contar com os casos de 1 só dígito porque, de facto, aí não se faz soma nenhuma, também é fácil de alterar o programa... :lol: e então confere:

Código: Seleccionar Todos
Maximum number of digits to search 6
Please wait...
The numbers are [4150, 4151, 54748, 92727, 93084, 194979]
and their sum is 443839


Basta escrever uma função para fazer a soma da m-ésima potência dos dígitos do número n, o resto é fácil. :wink:

Re: Números especiais

MensagemEnviado: Terça Fev 10, 2009 7:55 pm
por Bruno Oliveira
Pois é mesmo essa função que eu não consegui fazer :(

Re: Números especiais

MensagemEnviado: Terça Fev 10, 2009 7:57 pm
por jap
Bruno Oliveira Escreveu:Pois é mesmo essa função que eu não consegui fazer :(


Código: Seleccionar Todos
def sumdigits(n,m):
    "sum of the mth power of the digits of n"
    return sum(map(lambda c: int(c)**m,str(n)))

Re: Números especiais

MensagemEnviado: Terça Fev 10, 2009 8:05 pm
por Ivo_Timóteo
Sim, o resultado correcto é 443839 :)

O problema em si é fácil de passar para código, mesmo muito fácil... E de ter accepted no PE também :)

Mas como saber que não há números maiores que N que satisfazem a condição? Que N é esse?
Embora ligeiramente fora do âmbito do Quark!, podem tentar demonstrar :) É mesmo muito fácil :D

Re: Números especiais

MensagemEnviado: Terça Fev 10, 2009 8:20 pm
por Bruno Oliveira
Novamente as lambda functions! :D

Tenho de ver se as domino de vez, são muito utilizadas e decerto que se as dominar poderei resolver muitos outros problemas do project euler! :wink:

Obrigado prof. :)

Re: Números especiais

MensagemEnviado: Terça Fev 10, 2009 8:28 pm
por Ivo_Timóteo
Já agora Bruno, qual e o teu 'nome' no PE? És português?