1
resposta

Imprimir Lista de Multiplos (PHP)

Pessoal, estou em dúvida sobre a lógica a usar para para o seguinte desafio:

  • Escrever um script PHP que imprima todos os números inteiros de 1 a 100. Entre cada número, imprima os números dos quais cada um é multiplo (entre colchetes e separados por vírgula), e caso o número seja multiplo somente de si mesmo, imprima "[PRIME]". (A resposta deve ser devolvida em JSON no endpoint /)

Até agora, consegui resolver a segunda parte do desafio, (retornando [PRIME] para os números primos, mas não sei como implementar a primeira parte. segue codigo abaixo (estou usando o symfony)

public function index(): Response
    {
        $primes = [];
        $multipleList = [];
        $aux = [];
        $number = 2 ;
        while ($number < 100)
        {
            $div_count=0;
            for ( $i=1;$i<=$number;$i++)
            {
                if (($number % $i) == 0)
                {
                    //a lógica de um array auxiliar com o indice $i, que contém a lista de múltiplos deveria vir aqui, eu acho, mas nao estou sabendo implementar.
                    $div_count++;
                }
            }
            if ($div_count<3)
            {
                $primes = array_fill(0, $number, "[PRIME]");
            }
            $number++;
        }
        for($i=0;$i<=100;$i++) {
            if(!in_array($i, $primes)) {
                $multipleList[] = $i;
                //essa parte é somente para pegar os numeros que não são primos.
            }
        }

        return new JsonResponse(['PRIME NUMBERS' => $primes,]);
    }
1 resposta

Olá, Ikaro! Tudo bem?

Peço desculpa pela demora para responder o seu tópico.

Uma forma de implementar essa lógica é criar um array auxiliar para cada número, onde cada índice desse array representa um número pelo qual o número atual é múltiplo. Assim, você pode adicionar esses números ao array auxiliar dentro do loop for, logo após incrementar a variável $div_count.

Por exemplo, você pode adicionar a linha $aux[$i][] = $number; dentro do if que verifica se o número é divisível por $i. Dessa forma, o array auxiliar no índice $i irá armazenar todos os números pelos quais o número atual é múltiplo.

Após o loop for, você pode percorrer o array auxiliar e imprimir os números múltiplos de cada número. Por exemplo, você pode adicionar a linha $multipleList[$number] = implode(",", $aux[$number]); dentro do loop while, logo antes de incrementar a variável $number. Isso irá adicionar ao array $multipleList os números múltiplos do número atual, separados por vírgula.

Aqui está o código com as modificações sugeridas:

public function index(): Response
{
    $primes = [];
    $multipleList = [];
    $aux = [];
    $number = 2 ;
    while ($number < 100)
    {
        $div_count=0;
        for ( $i=1;$i<=$number;$i++)
        {
            if (($number % $i) == 0)
            {
                $div_count++;
                $aux[$i][] = $number; // Adiciona os números múltiplos ao array auxiliar
            }
        }
        if ($div_count<3)
        {
            $primes = array_fill(0, $number, "[PRIME]");
        }
        $multipleList[$number] = implode(",", $aux[$number]); // Adiciona os números múltiplos ao array $multipleList
        $number++;
    }
    for($i=0;$i<=100;$i++) {
        if(!in_array($i, $primes)) {
            $multipleList[] = $i;
        }
    }

    return new JsonResponse(['PRIME NUMBERS' => $primes, 'MULTIPLE LIST' => $multipleList]);
}

Contudo, o código acima representa um exemplo de implementação no trecho de código que você compartilhou. Então faça ajustes para encaixar melhor no contexto geral do seu projeto.

Espero que isso te ajude a resolver o desafio! Se tiver mais alguma dúvida, estarei à disposição.

Bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software