Calculation of the smallest divisible number giving infinite loop in C

0

I made a program in C to solve the following exercise:

Code:

#include"stdio.h"
#include "stdlib.h"

int main(int argc, char const *argv[]) {

int num = 0;
int count = 20;
int contaDivisores = 0;

for(int i = 1; i <= count; i++){
    for(int j = 1; j <= 20; j++){
        //Esse loop checa se o numero atual e divisivel por todos os numeros de 1 a 20
        if(i % j == 0){
            contaDivisores++;//Se for divisivel, aumenta o contador de divisores
            printf("%d\n", i);
        }
    }
    if(contaDivisores == 20){
        num = count;/*Se o numero acima for divisivel por todos
         os numeros, significa que a contagem atual é o numero desejado*/
        break;
    }else{
        count++;//Se não for, muda o numero que deverá ser checado em 
  //seguida
    }
 }

 printf("Numero:%d\n", num);//Mostra o número

 return 0;
}

However, when you run the code, you get an infinite loop:

I tried to make some changes to the code, but I could not solve the problem. What should be done so that the infinite loop does not occur?

    
asked by anonymous 20.04.2017 / 00:44

2 answers

1

A very practical solution (explanations in the comments in the code):

// Define o range de divisores:
const unsigned short MAX = 20;

int main(int argc, char const *argv[]) {

    // Resultado, do tipo long, pois rapidamente estoraria
    // valor máximo de int (2147483647). 
    // O máximo de ulong é 18446744073709551615
    unsigned long int number = 0;

    // Loop infinito, pois não sabemos quantas iterações haverão
    while (1)
    {
        // Número de divisores encontrados
        unsigned short dividers = 0;

        number++;

        // Itera sobre o range de valores
        for (unsigned short i = 1; i <= MAX; i++)
        {
            // O valor é um divisor?
            if (number % i == 0) {
                // Se sim, incrementa o número de divisores
                dividers++;
            } else {
                // Se não, vai para o próximo número
                break;
            }
        }

        // Foram encontrados todos os divisores?
        if (dividers == MAX) {
            // Sim, exibe o valor e encerra o loop infinito
            printf("Numero:%d\n", number);
            break;
        }
    }

    return 0;
}

Running to 10 values, the result is 2520 , as expected. For 20 values, the result is 232792560 .

See working here or here .

    
20.04.2017 / 04:48
1

Dude I did not understand the question well, but the loop is because your variable will always be greater than i, so I advise you to use "while" and without a variable, put the number 20 as you did in the second "for" .

    
20.04.2017 / 01:55