Re: Res: [obm-l] Algoritmo

2007-09-27 Por tôpico Fetofs Ashu
O algoritmo que usei para achar soluções enormes (escrevi em C) foi
basicamente desse jeito:

1) Descubra todos os números possíveis com b positivo (ou seja, para cada a
com a²1000, teste os b's). Essa parte é muito simples e rápida.

2) Achar os números com b negativo:

- Volte o a para 0 (importante, porque há soluções com a²1000 e b0), e
comece a diminuir o b (começando de -1). Eu escolhi ir diminuindo o b e
não o a porque tem menos b's do que a's em qualquer solução.

- Para um determinado b, todos os possíveis a são dados pela inequação:
100a^2 + b^3999
100-b^3a^2999-b^3
sqrt(100-b^3)  a  sqrt(999-b^3)

Se não há números inteiros entre sqrt(100-b^3) e sqrt(999-b^3), então não há
solução. Se há, esses números são soluções garantidas, e você pode fazer o
que quiser com eles (mostrar na command line, adicionar a uma lista de
soluções, etc.). O código está aí embaixo, mas se você não souber usar GMP
não vai servir pra muita coisa... O último valor que eu vejo depois de meio
minuto rodando ele é:
a = 611085363
b = -720114
a^2+b^3 = 225

Depois desse valor ele parece parar de produzir soluções por um bom tempo.

#include stdio.h
#include gmp.h

int main() {
mpz_t b, a, b_cbd, min_val, max_val, sum, a_sq;
mpz_init_set_si(b, -1);

mpz_init(a);
mpz_init(b_cbd);
mpz_init(min_val);
mpz_init(max_val);
mpz_init(sum);
mpz_init(a_sq);

while (1) {
mpz_pow_ui(b_cbd, b, 3);

mpz_ui_sub(min_val, 100, b_cbd);
if (mpz_perfect_square_p(min_val)) {
mpz_sqrt(min_val, min_val);
}
else {
mpz_sqrt(min_val, min_val);
mpz_add_ui(min_val, min_val, 1);
}

mpz_ui_sub(max_val, 999, b_cbd);
mpz_sqrt(max_val, max_val);
mpz_add_ui(max_val, max_val, 1);

mpz_set(a, min_val);
while (mpz_cmp(a, max_val) == -1) {
mpz_pow_ui(a_sq, a, 2);
mpz_add(sum, b_cbd, a_sq);

mpz_out_str(NULL, 10, sum);
printf( );
mpz_out_str(NULL, 10, a);
printf( );
mpz_out_str(NULL, 10, b);
printf(\n);

mpz_add_ui(a, a, 1);
}

mpz_sub_ui(b, b, 1);
}
}

Quem te passou esse problema disse que ele podia ser resolvido? Ou você está
satisfazendo um problema-curiosidade? Se for a segunda opção, é possível
que você nunca encontre todos os valores possíveis. Se for a primeira,
talvez tenha um jeito matemático de reduzir os possíveis valores finais...


Res: Res: [obm-l] Algoritmo

2007-09-26 Por tôpico Danilo Nascimento
Será que baseado no fato de o limite não existir eu posso afirmar que TODOS os 
numeros de três algarismos podem ser escritos como a soma de um quadrado e um 
cubo.
X=a^2+b^3 onde a e b são inteiros quaisquer.


- Mensagem original 
De: Danilo Nascimento [EMAIL PROTECTED]
Para: obm-l@mat.puc-rio.br
Enviadas: Segunda-feira, 24 de Setembro de 2007 14:08:01
Assunto: Res: [obm-l] Algoritmo


Se tal limite não existe, como que eu vou fazer um algoritmo então? Será que eu 
vou ter que usar os limites que a linguagem oferece? Dá algo em torno de 2 
bilhões. Mas qual a garantia que eu tenho que eu vou achar todos os numeros de 
três algarismos? 
Parece ser complicado.


- Mensagem original 
De: Fetofs Ashu [EMAIL PROTECTED]
Para: obm-l@mat.puc-rio.br
Enviadas: Sábado, 22 de Setembro de 2007 14:35:34
Assunto: Re: [obm-l] Algoritmo

Eu acho que não há limites para a e b, se b pode ser negativo. Tome como 
exemplo a = 38339 e b = -1137 (resultado 568). Tenho certeza de que se 
continuasse acharia valores maiores ainda...

Fernando Oliveira


On 9/21/07, Danilo Nascimento [EMAIL PROTECTED] wrote: 
Olá pessoal
  estou tentando desenvolver um algoritmo em Pascal para 
achar todos os números de 3 algarismos que podem ser escritos como a soma de um 
quadrado e um cubo. Só que tem um problema, como achar os limites dos valores 
que estão variando o contador? 
Por exemplo :  100a^2+b^3999. Preciso fazer um loop com os valores de a e b, 
que podem ser tanto positivos quanto negativos. Eu fiz na base da tentativa e 
erro e achei que o máximo de a seria 941 e o mínimo de b=-96. Não sei se são 
exatamente esses os valores. Mas de qualquer forma como eu faria isso de um 
modo formal? 
Agradeço desde já qualquer ajuda.
 

Flickr agora em português. Você clica, todo mundo vê. Saiba mais . 





Flickr agora em português. Você clica, todo mundo vê. Saiba mais.


  Flickr agora em português. Você clica, todo mundo vê.
http://www.flickr.com.br/

Re: Res: [obm-l] Algoritmo

2007-09-26 Por tôpico Samir Rodrigues
Conjectura de Danilo, hehehehehehe
Vc pode tentar comprovar isso montando um programa que começe com a²=1, e
vai variando b no sentido positivo e vá vendo os numeros de 3 algarismos
formados; faça isso enquanto a²1000; quando a²=1000, faça-0 continar
aumentando, e agora faça b variar no sentido negativo; há uma grande chance
dessa sua conjectura está correta.
Vc também pode tentar contar na forma de funcao geratriz, mas aí daria
trabalho

Em 26/09/07, Danilo Nascimento [EMAIL PROTECTED] escreveu:

 Será que baseado no fato de o limite não existir eu posso afirmar
 que TODOS os numeros de três algarismos podem ser escritos como a soma de um
 quadrado e um cubo.
 X=a^2+b^3 onde a e b são inteiros quaisquer.

 - Mensagem original 
 De: Danilo Nascimento [EMAIL PROTECTED]
 Para: obm-l@mat.puc-rio.br
 Enviadas: Segunda-feira, 24 de Setembro de 2007 14:08:01
 Assunto: Res: [obm-l] Algoritmo

  Se tal limite não existe, como que eu vou fazer um algoritmo então? Será
 que eu vou ter que usar os limites que a linguagem oferece? Dá algo em torno
 de 2 bilhões. Mas qual a garantia que eu tenho que eu vou achar todos os
 numeros de três algarismos?
 Parece ser complicado.

 - Mensagem original 
 De: Fetofs Ashu [EMAIL PROTECTED]
 Para: obm-l@mat.puc-rio.br
 Enviadas: Sábado, 22 de Setembro de 2007 14:35:34
 Assunto: Re: [obm-l] Algoritmo

 Eu acho que não há limites para a e b, se b pode ser negativo. Tome como
 exemplo a = 38339 e b = -1137 (resultado 568). Tenho certeza de que se
 continuasse acharia valores maiores ainda...

 Fernando Oliveira

 On 9/21/07, Danilo Nascimento [EMAIL PROTECTED] wrote:
 
   Olá pessoal
estou tentando desenvolver um algoritmo em Pascal
  para achar todos os números de 3 algarismos que podem ser escritos como a
  soma de um quadrado e um cubo. Só que tem um problema, como achar os limites
  dos valores que estão variando o contador?
  Por exemplo :  100a^2+b^3999. Preciso fazer um loop com os valores de
  a e b, que podem ser tanto positivos quanto negativos. Eu fiz na base da
  tentativa e erro e achei que o máximo de a seria 941 e o mínimo de b=-96.
  Não sei se são exatamente esses os valores. Mas de qualquer forma como eu
  faria isso de um modo formal?
  Agradeço desde já qualquer ajuda.
 
 
  Flickr agora em português. Você clica, todo mundo vê. Saiba mais
  http://br.rd.yahoo.com/mail/taglines/flickr/*http://www.flickr.com.br/.
 
 



 Flickr agora em português. Você clica, todo mundo vê. Saiba 
 maishttp://br.rd.yahoo.com/mail/taglines/flickr/*http://www.flickr.com.br/.



 Flickr agora em português. Você clica, todo mundo vê. Saiba 
 maishttp://br.rd.yahoo.com/mail/taglines/flickr/*http://www.flickr.com.br/.





-- 
Samir Rodrigues


Re: Res: [obm-l] Algoritmo

2007-09-26 Por tôpico Samir Rodrigues
Esqueçam sobre a função geratriz

Em 26/09/07, Samir Rodrigues [EMAIL PROTECTED] escreveu:

 Conjectura de Danilo, hehehehehehe
 Vc pode tentar comprovar isso montando um programa que começe com a²=1, e
 vai variando b no sentido positivo e vá vendo os numeros de 3 algarismos
 formados; faça isso enquanto a²1000; quando a²=1000, faça-0 continar
 aumentando, e agora faça b variar no sentido negativo; há uma grande chance
 dessa sua conjectura está correta.
 Vc também pode tentar contar na forma de funcao geratriz, mas aí daria
 trabalho

 Em 26/09/07, Danilo Nascimento  [EMAIL PROTECTED] escreveu:
 
  Será que baseado no fato de o limite não existir eu posso afirmar
  que TODOS os numeros de três algarismos podem ser escritos como a soma de um
  quadrado e um cubo.
  X=a^2+b^3 onde a e b são inteiros quaisquer.
 
  - Mensagem original 
  De: Danilo Nascimento  [EMAIL PROTECTED]
  Para: obm-l@mat.puc-rio.br
  Enviadas: Segunda-feira, 24 de Setembro de 2007 14:08:01
  Assunto: Res: [obm-l] Algoritmo
 
   Se tal limite não existe, como que eu vou fazer um algoritmo então?
  Será que eu vou ter que usar os limites que a linguagem oferece? Dá algo em
  torno de 2 bilhões. Mas qual a garantia que eu tenho que eu vou achar todos
  os numeros de três algarismos?
  Parece ser complicado.
 
  - Mensagem original 
  De: Fetofs Ashu  [EMAIL PROTECTED]
  Para: obm-l@mat.puc-rio.br
  Enviadas: Sábado, 22 de Setembro de 2007 14:35:34
  Assunto: Re: [obm-l] Algoritmo
 
  Eu acho que não há limites para a e b, se b pode ser negativo. Tome como
  exemplo a = 38339 e b = -1137 (resultado 568). Tenho certeza de que se
  continuasse acharia valores maiores ainda...
 
  Fernando Oliveira
 
  On 9/21/07, Danilo Nascimento  [EMAIL PROTECTED] wrote:
  
Olá pessoal
 estou tentando desenvolver um algoritmo em
   Pascal para achar todos os números de 3 algarismos que podem ser escritos
   como a soma de um quadrado e um cubo. Só que tem um problema, como achar 
   os
   limites dos valores que estão variando o contador?
   Por exemplo :  100a^2+b^3999. Preciso fazer um loop com os valores
   de a e b, que podem ser tanto positivos quanto negativos. Eu fiz na base 
   da
   tentativa e erro e achei que o máximo de a seria 941 e o mínimo de b=-96.
   Não sei se são exatamente esses os valores. Mas de qualquer forma como eu
   faria isso de um modo formal?
   Agradeço desde já qualquer ajuda.
  
  
   Flickr agora em português. Você clica, todo mundo vê. Saiba mais
   http://br.rd.yahoo.com/mail/taglines/flickr/*http://www.flickr.com.br/.
  
  
 
 
 
  Flickr agora em português. Você clica, todo mundo vê. Saiba 
  maishttp://br.rd.yahoo.com/mail/taglines/flickr/*http://www.flickr.com.br/.
 
 
 
  Flickr agora em português. Você clica, todo mundo vê. Saiba mais
  http://br.rd.yahoo.com/mail/taglines/flickr/*http://www.flickr.com.br/.
 
 



 --
 Samir Rodrigues




-- 
Samir Rodrigues


Res: [obm-l] Algoritmo

2007-09-24 Por tôpico Danilo Nascimento
Se tal limite não existe, como que eu vou fazer um algoritmo então? Será que eu 
vou ter que usar os limites que a linguagem oferece? Dá algo em torno de 2 
bilhões. Mas qual a garantia que eu tenho que eu vou achar todos os numeros de 
três algarismos? 
Parece ser complicado.


- Mensagem original 
De: Fetofs Ashu [EMAIL PROTECTED]
Para: obm-l@mat.puc-rio.br
Enviadas: Sábado, 22 de Setembro de 2007 14:35:34
Assunto: Re: [obm-l] Algoritmo

Eu acho que não há limites para a e b, se b pode ser negativo. Tome como 
exemplo a = 38339 e b = -1137 (resultado 568). Tenho certeza de que se 
continuasse acharia valores maiores ainda...

Fernando Oliveira


On 9/21/07, Danilo Nascimento [EMAIL PROTECTED] wrote:
Olá pessoal
  estou tentando desenvolver um algoritmo em Pascal para 
achar todos os números de 3 algarismos que podem ser escritos como a soma de um 
quadrado e um cubo. Só que tem um problema, como achar os limites dos valores 
que estão variando o contador? 
Por exemplo :  100a^2+b^3999. Preciso fazer um loop com os valores de a e b, 
que podem ser tanto positivos quanto negativos. Eu fiz na base da tentativa e 
erro e achei que o máximo de a seria 941 e o mínimo de b=-96. Não sei se são 
exatamente esses os valores. Mas de qualquer forma como eu faria isso de um 
modo formal? 
Agradeço desde já qualquer ajuda.
 

Flickr agora em português. Você clica, todo mundo vê. Saiba mais .


  Flickr agora em português. Você clica, todo mundo vê.
http://www.flickr.com.br/

Res: [obm-l] Algoritmo

2007-09-22 Por tôpico Danilo Nascimento
Olá Marcelo,
 acho que não vai funcionar desse jeito. Eu, por exemplo, 
posso tomar a=33 e b=-5 
a^2+b^3 = 964. Eu estaria excluindo esse número.
[]'s.


- Mensagem original 
De: Marcelo Salhab Brogliato [EMAIL PROTECTED]
Para: obm-l@mat.puc-rio.br
Enviadas: Sexta-feira, 21 de Setembro de 2007 21:41:06
Assunto: Re: [obm-l] Algoritmo


Olá Danilo,

fica aqui uma sugestão:
Considere b=0, entao: 100  a^2  999  10  |a|  32 [soh pra arredondar]
Do mesmo modo, vc acha: 4  |b|  10
faca a variar de 10 à 32... b variar de 4 à 10...
se a soma passar de 999, dê um break no for interno e passe para o proximo...

abracos,
Salhab


On 9/21/07, Danilo Nascimento [EMAIL PROTECTED] wrote:

 Olá pessoal
   estou tentando desenvolver um algoritmo em Pascal para
 achar todos os números de 3 algarismos que podem ser escritos como a soma de
 um quadrado e um cubo. Só que tem um problema, como achar os limites dos
 valores que estão variando o contador?
 Por exemplo :  100a^2+b^3999. Preciso fazer um loop com os valores de a e
 b, que podem ser tanto positivos quanto negativos. Eu fiz na base da
 tentativa e erro e achei que o máximo de a seria 941 e o mínimo de b=-96.
 Não sei se são exatamente esses os valores. Mas de qualquer forma como eu
 faria isso de um modo formal?
 Agradeço desde já qualquer ajuda.

  Flickr agora em português. Você clica, todo mundo vê. Saiba mais.

=
Instruções para entrar na lista, sair da lista e usar a lista em
http://www.mat.puc-rio.br/~nicolau/olimp/obm-l.html
=


  Flickr agora em português. Você clica, todo mundo vê.
http://www.flickr.com.br/