1
resposta

Imprimir Lista de Multiplos em loop for (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
    {
        /* Finding The Prime Numbers */
        $multipleList = [];
        $number = 2 ;
        while ($number < 100)
        {
            $div_count=0;
            for ( $i=1;$i<=$number;$i++)
            {
                if (($number % $i) == 0)
                {
                    $div_count++;
                }
            }
            if ($div_count<3)
            {
                $rawPrimal[] = $number;
            }
            $number++;
        }
        for($i=1;$i<=100;$i++) {
            if(!in_array($i, $rawPrimal)) {
                $multipleList[] = $i;
            }

        }

        /* Building the CONVERTED PRIME Array */
        foreach ($rawPrimal as $primal) {
            $primal = $primal . " - [PRIME]";
            $convertedPrime[] = $primal;
        }

        /* Building the FINAL Merged Array */
        $output = [...$multipleList, ...$rawPrimal];
        for($i = 1; $i <= count($output); $i++) {
            if(in_array($i, $rawPrimal)) {
                $output[$i] = "[PRIME]";

            }
            if(!in_array($i, $rawPrimal)) {
                if($i % 2 === 0 && $i % 5 === 0) {
                    $multiples[] = $i;

                }
            }
        }

        return new JsonResponse(['RAW PRIME' => $rawPrimal, 'CONVERTED PRIME' => $convertedPrime, 'Merged Array' => $output, 'Array of Multiples' => $multiples]);
    }

Os multiplos deveriam ser arrays contidos em cada um dos indices do array principal, de forma que:

$output[$i] = array("aqui devem aparecer todos os numeros que sao multiplos do numero índice) 

não sei como fazer isso =(

1 resposta

Olá, Ikaro! Tudo bem?

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

Uma maneira de resolver isso é percorrer os números de 1 a 100 utilizando um loop for e, dentro desse loop, verificar quais números são múltiplos do número atual. Você pode armazenar esses múltiplos em um array associativo, onde a chave é o número atual e o valor é um array contendo os múltiplos.

Aqui está um exemplo de como você pode implementar essa lógica no seu código:

public function index(): Response
{
    $output = [];
    
    for ($i = 1; $i <= 100; $i++) {
        $multiples = [];
        
        for ($j = 1; $j <= $i; $j++) {
            if ($i % $j === 0) {
                $multiples[] = $j;
            }
        }
        
        $output[$i] = $multiples;
    }
    
    return new JsonResponse($output);
}

Dessa forma, o array $output terá como chaves os números de 1 a 100 e como valores os arrays contendo os múltiplos de cada número.

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

Abraços e bons estudos!

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