• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Triton

Math's & Programming Challenges (Project Euler)

27 mensagens neste tópico

Project Euler is a series of challenging mathematical/computer programming problems that will require more than just mathematical insights to solve. Although mathematics will help you arrive at elegant and efficient methods, the use of a computer and programming skills will be required to solve most problems.

Bem, como só conheço 4 portugueses neste projecto, decidi deixar o desafio. Vou lançando soluções para os desafios á medida que os for conseguindo acabar, só mesmo para aqueles que tenham dúvidas, ou seja, para não ficarem encravados em certos pormenores estúpidos como eu fiquei.  :P :P

Comecei por usar C#, mas depois mudei para Python.

Link: http://mathschallenge.net/index.php?section=project

Soluções:

# Problem 1

sum = 0
for i in range(1,1000):
    if i % 3 == 0 or i % 5 == 0:
        sum = sum + i
print sum

# Problem 2

const int limit = 1000000;
int previous = 1;
int sum = 0;
int result = 1;
int x = 0;

for (int i = 1; i <= limit; i += previous)
{
    if(x>0)previous = i - previous;
    x++;
    if (i % 2 == 0)sum += i;
}

Neste momento já tenho resolvidos até ao 15, se quiserem que continue a postar as soluções digam. Não quero ser muito spoiler! :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Como já tinham apresentado a solução em Python, eu apresento a minha em C:

Problema 1:

#include <stdio.h>
#include <stdlib.h>

main()
{
      int i;
      int soma=0;
      
      for(i=0;i<1000;i++)
      {
              if(i%3==0 || i%5==0)
              {
                        soma=soma+i;
                        printf("%d \n",soma);
                        }
} 
     system("PAUSE");
    

}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Parece-me fantástico, mas agora não tenho tempo para estar a ver os problemas  :buck2:. Tenho muita pena  :P

Sendo este tópico de Algoritmia e Lógica, deve ser acessível a todos os programadores.

Para isso devia-se apresentar um código universal, ou seja, pseudocódigo. Assim, qualquer programador pode analizar as vossas soluções (independentemente da linguagem que utilizem)  :P.

Ficou aqui a minha sugestão.

Cumpr. brink@ero  :ipool:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes dar o exemplo do problema 1 em pseudo código? :eek:

Não tou a ver como faço para pôr as soluções dos problemas sem ser numa linguagem específica.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ripzone ja tens ai 2 codigos para o problema 1. para que linguagem procuras?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes dar o exemplo do problema 1 em pseudo código? :eek:

Não tou a ver como faço para pôr as soluções dos problemas sem ser numa linguagem específica.

Depois de fazer o programa, poes o o pseudocódigo como anexo para todos entederem.

ripzone ja tens ai 2 codigos para o problema 1. para que linguagem procuras?

Por acaso percebo de C, mas nem toda a gente sabe C ou Python. Sendo impossível estar a resolver o problema em todas as linguagens. Eu acho útil ter o pseudocódigo, principalmente nesta secção que é destinada à todos os programadores e à todas as linguagens de programação.

Por exemplo, o código do deathseeker25:

#include <stdio.h>
#include <stdlib.h>

main()
{
      int i;
      int soma=0;
      
      for(i=0;i<1000;i++)
      {
              if(i%3==0 || i%5==0)
              {
                        soma=soma+i;
                        printf("%d \n",soma);
                        }
} 
     system("PAUSE");
}

Pseudocódigo:

Inicializar a variável soma a 0

Ciclo de i com o valor inicial 0, de 1 à 1 até ao valor 999

        Se o resto da divisão inteira de i por 3 ou i por 5 ser igual a 0

        Então

                  Adiciona o valor da variável i na variável soma

                  Escreve o valor da variável soma

        Fim do se

Fim do ciclo com a variável i

Escreve "Prima qualquer tecla para continuar..."

Espera que o utilizador pressione uma tecla

Isto é um exemplo.

Cumpr. brink@ero  :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O problema que estão a resolver é muito simples....

curti muito este problema

Problem 7

By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13.

What is the 10001st prime number?

tenho um programa feito em C + MPI ( computaçãao paralela.... ) vou  correr isso no departamento para descobrir o numero primo na 10001st...se conseguir la chegar...  :thumbsup: se não mandar os pc's a baixo... :D

p.s como o site está em ingles, tenho muitas dificuldades em perceber o objectivo... percebi mais ao menos...  :P

disseram que existiam 4 portugueses neste projecto.... alguem me pode dizer quem são...como os contactar... ou assim... para saber de mais coisas? andei a ver mas nao encontrei nada  :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ele queria dizer que existiam 4 portugueses inscritos. (suponho eu, visto agora serem 7)

Do lado esquerdo, carrega em statistics, e podes ver todos os portugueses que estão a participar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Que parte é que não percebeste?

Quem tiver dúvida diga, que talvez possa ajudar. :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O problema que estão a resolver é muito simples....

curti muito este problema

Problem 7

By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13.

What is the 10001st prime number?

tenho um programa feito em C + MPI ( computaçãao paralela.... ) vou  correr isso no departamento para descobrir o numero primo na 10001st...se conseguir la chegar...  :thumbsup: se não mandar os pc's a baixo... :D

p.s como o site está em ingles, tenho muitas dificuldades em perceber o objectivo... percebi mais ao menos...  :P

disseram que existiam 4 portugueses neste projecto.... alguem me pode dizer quem são...como os contactar... ou assim... para saber de mais coisas? andei a ver mas nao encontrei nada  :D

Exercícios deste género são relativamente simples de resolver com o Crivo de Erastotenes, tal como ripzone sugeriu...

http://www.portugal-a-programar.pt/index.php?showtopic=1743

Infelizmente tb nao tenho tempo para ir ao site, mas pelo codigo do deathseeker25, suponho que as soluções não são submetidas a um corrector automático certo? ( digo isto por causa do  system("pause").. daria time limit exceeded).

Espero pa semana poder dar uma olhadela, tb gosto mt destes desafios

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para validar as soluções é preciso enviar a resposta certa. Mas aqui a partir do 20 começa a ser muito puxado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o Crivo de Erastotenes é muito util para encontrar os numeros primos....  :D

o programa que tenho usa isso :P

UnKnowN não percebeste o que?

para ajudar a resolver isto:

Problem 7

By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13.

What is the 10001st prime number?

será util usar :  Crivo de Erastotenes  :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu nao percebi a "lógica" ou "essência" como lhe kiserem xamar, do Crivo de Erastotenes

PS: Já me registei e acho o site mesmo MT BOM! grande post ripzone :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Parece-me fantástico. Vou-me inscrever.  :thumbsup:

ja me registei...mas nao me inscrevi....

pelo que vi isso nao tem limite de tempo... existem os problemas e toca a resolver né? e depois so tens que apresentar a solução... e ganhas pontos por cada resposta consoante o tipo de pergunta e o grau de dificuldade.... hummmm :hmm:

EDIT

Criei um post a falar nos Crivo de Eratosthenes na secção de matemática : Aqui

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

# Problem 1

sum = 0
for i in range(1,1000):
    if i % 3 == 0 or i % 5 == 0:
        sum = sum + i
print sum

Podes explicar.me porque é que primeiro temos de dar o valor 0 ao sum ? porque é que nao pode ser

>>> for i in range(1,1001):
             if i % 3 == 0 or i % 5 == 0:
             i = i + i
             print i

Desde de já agradeço :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É assim, tens vários erros no teu código.

1º - No Python as linhas são identificadas pelo espaços em relação ás outras (identation)

2º - Estás a usar a variável do loop for i para juntar números, pois em cada iteração ela é mudada para valores de 1 a 1000.

3º - Também acho que não queres fazer print ao i em cada ciclo for, logo deves por o print mais atrás.

Eu dei valor 0 ao sum para iniciar a variavél.

Nota: i = i + i pode ser simplemente i += i .

b = 0 # inicializa a variável
for i in range(1,1001):
             if i % 3 == 0 or i % 5 == 0:
                          b += i # adiciona i ao b
print b # mostra o valor final do b

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas,

inscrevi-me nesse site há umas horas e já resolvi os 7 exercícios mais fáceis (ordenei a lista pelo grau de dificuldade). Acontece que para o 8º problema da lista por grau de dificuldade -> PROBLEMA 10 (abaixo a sua descrição:)

The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17.

Find the sum of all the primes below one million.

criei o seguinte código (C#):

            double resultado = 5;
            for (double i = 4; i < 1000000; i++)
            {
                for (int i2 = 2; i2 <= Math.Sqrt(i) ; i2++)
                {
                    if (i % i2 == 0)
                    {
                        break;
                    }
                    if (i2 == ((int)Math.Sqrt(i)))
                    {
                        resultado += i;
                        break;
                    }
                }
            }
            textBox8.Text = resultado.ToString();

mas ao corrê-lo, a aplicação passa a utilizar 99% do CPU e, mesmo após alguns minutos de trabalho (o máximo que deixei foram 15 minutos) não há maneira de sair o resultado... Alguém me pode sugerir um algoritmo mais eficaz?

PS - Ainda não vi esse algoritmo de Eratosthenes... Vou agora tentar implementá-lo, mas mesmo assim agradecia ajudas/razões pela ineficiência do meu código (é porque sou novato nisto...)

EDIT: Problema resolvido, juntei ao código um if para que o ciclo FOR interior só vá até à raiz quadrada de i .

Em poucos segundos consigo obter o valor  :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Epah como é que só agora é que vi isto?

Eu adoro este tipo de problemas... vou começar a fazer alguns..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

© mathschallenge.net

Problem 1

If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.

Find the sum of all the multiples of 3 or 5 below 1000

dá 2294006 ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

© mathschallenge.net

Problem 1

If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.

Find the sum of all the multiples of 3 or 5 below 1000

dá 2294006 ?

Tipo tens lá o sítio para pôr a resposta.

Estou a fazê-los pela ordem que aparecem e estou agora no 7 se não me engano.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora