Ir ao conteúdo

Posts recomendados

Postado

A sequência dos números dos triângulos é gerada adicionando os números naturais. Portanto, o número do sétimo triângulo seria 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. Os dez primeiros termos seriam: 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...

Vamos listar os fatores dos sete primeiros números de triângulo:  

1: 1  

3: 1,3  

6: 1,2,3,6

10: 1,2,5,10

15: 1,3,5,15

21: 1,3,7,21

28: 1,2,4,7,14,28

Podemos ver que 28 é o primeiro número do triângulo a ter mais de cinco divisores. Qual é o valor do primeiro número do triângulo para ter mais de quinhentos divisores?

 

O código que eu fiz foi:

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

int main (){

  long int res=0, div=2;
  int cont=0, num=1;

  while (cont==0){
    res+=num;
    while (div<res){
      if (res%div==0){
        cont++;
      }
      div++;
    }
    if (cont>500){
      printf ("%li\n", res);
      break;
    } else{
      cont=0;
      div=2;
      num++;
    }
  }

  return 0;
}

Se alguém puder me ajudar, eu agradeço!!

Postado
2 horas atrás, jpalmeida34 disse:

A sequência dos números dos triângulos é gerada adicionando os números naturais. Portanto, o número do sétimo triângulo seria 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. Os dez primeiros termos seriam: 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...

Vamos listar os fatores dos sete primeiros números de triângulo:  

1: 1  

3: 1,3  

6: 1,2,3,6

10: 1,2,5,10

15: 1,3,5,15

21: 1,3,7,21

28: 1,2,4,7,14,28

Podemos ver que 28 é o primeiro número do triângulo a ter mais de cinco divisores. Qual é o valor do primeiro número do triângulo para ter mais de quinhentos divisores

 

Então...

 

Não li o programa ainda. Apenas o enunciado. Não entendi porque são triângulos e o que são divisores, mas a série é uma simples progressão. E a notação não está boa. Ou o exemplo está ruim. Então o que chama de primeiro número seria a soma e conseguir o valor seria apenas um loop. E seu programa está bem. Não está funcionando?

Eis como poderia ser o texto, com exemplos levando até o resultado que mostrou

1    1 
2    3=1+2 
3    6= 1+2+3
4    10=1+2+3+4
5    15=1+2+3+4+5
6    21=1+2+3+4+5+6
7    28=1+2+3+4+5+6+7

...

500

Seu programa parece complicado demais. Mas vou ler

 

Vejo duas opções: contar simplesmente ou deduzir a fórmula. E seu programa não parece estar fazendo nenhum dos dois, mas tentando a primeira opção. Usa 3 variáveis mas parece que só duas são necessárias...


 

 

 

 

Postado

Depois do almoço...

 

Vendo os dois lados da coisa e tentando dar um exemplo de como tratar esse tipo de problema:


Seja N esse valor então:

  • A cada loop você simplesmente soma N ao total e continua. 500 valores, 500 parcelas. Nada mais
    E um loop assim serviria
        int soma = 0;
        int N = 0;
        for (N = 1; N <= 500; N += 1)
        {
            soma = soma + N;
            if (N <= 10)
                printf("%4d: Soma %d\n", N, soma);
        };
        N = N - 1; // tinha passado no for
        printf("%4d: Soma %d\n", N, soma);

    E mostraria

   1: Soma 1
   2: Soma 3
   3: Soma 6
   4: Soma 10
   5: Soma 15
   6: Soma 21
   7: Soma 28
   8: Soma 36
   9: Soma 45
  10: Soma 55
 500: Soma 125250

E a fórmula? ... 

 

É um porre escrever aqui e não temos MathML no forum. Seria legal. Mas então...
 

N = 1 soma = 1

N = 2 soma = 1 + 2 = 3

N = 3 soma + 1 +2 +3 + 4 = 10 e tal...

 

então um por um

para 1: n

para 2: n + (n-1)

para 3: n + (n-1) + (n-2)
para 4: n + (n-1) + (n-2) + (n-3)

 

e já deu pra entender

 

Somando ficaria
 

para n = 1: n

para n = 2: n + (n-1) = n+n-1  = 2n-1

para n = 3: n + (n-1) + (n-2)    = n + n - 1 + n - 2 = n + n + n - 1 - 2
para n = 4: n + (n-1) + (n-2) + (n-3)  = n + n - 1 + n - 2 + n - 3 = n + n + n + n - 1 - 2 - 3

🤔

Isso também pode ser escrito assim 4n - (1+2+3) para n = 4

 

E assim por diante.

 

Então parece que para qualquer N a soma dá N*N menos aquela soma que vai de 1 até (N-1)...

 

Como já fizemos o ensino fundamental... aquela soma é uma progressão aritmética de razão 1: 
PA = 1, 2, 3, 4, 5, 6 ... Tipo contar de 1 em 1. Um pouco simples.

 

A soma de uma série dessas é conhecida desde o ensino fundamental: a metade soma do primeiro com o último, multiplicada pelo número de elementos. 1+2+3+4 = ( (1+4) / 2 ) * 4 = 10 por exemplo

 

Cansei de escrever. Veja aqui

 

1958145060_Imagem(14).thumb.jpg.34024db61a7fd54d22807418719d1403.jpg

Então é só calcular e não precisa de loop nenhum:

 

Para N = 3, (3*3 + 3)/2 =  6,

Para N = 7, (7*7 + 7)/2 = (49 * 7)/2 = 56/2 = 28

 

e para n = 500 a soma vale 125250

 

Como conferir? Usando o mesmo programa e mudando o printf()


   1: Soma 1. Formula: 1
   2: Soma 3. Formula: 3
   3: Soma 6. Formula: 6
   4: Soma 10. Formula: 10
   5: Soma 15. Formula: 15
   6: Soma 21. Formula: 21
   7: Soma 28. Formula: 28
   8: Soma 36. Formula: 36
   9: Soma 45. Formula: 45
  10: Soma 55. Formula: 55
 500: Soma 125250. Formula: 125250

Assim

#include <stdio.h>

int main()
{
    int soma = 0;
    int N = 0;
    for (N = 1; N <= 500; N += 1)
    {
        soma = soma + N;
        if (N <= 10) 
            printf("%4d: Soma %d. Formula: %d\n", N, soma, (N * N + N) / 2);
    };
    N = N - 1; // tinha passado no for
    printf("%4d: Soma %d. Formula: %d\n", N, soma, (N * N + N) / 2);
    return;
}

E o programa podia ser só 

#include <stdio.h>
int main()
{
    int N = 500;
    printf("%4d: Soma %d\n", N, (N * N + N) / 2);
}

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!