Hola Diego! Es correcto que el loop sea infinito, dado a que la comprobación del while siempre será verdadera. Puedes pensarlo paso a paso de esta manera:
1- Al llegar al ciclo while -línea 4- comprueba si la variable “tmp” es menor o igual a 50; lo cual es verdadero -en esta instancia, tmp vale 3 por su definición en la línea 1-. Por tal motivo, ingresa a ejecutar las sentencias dentro del ciclo -líneas 5 a 7-.
2- Se imprime el valor de la variable “multiplos” -en esta instancia vale 3 por su definición en la línea 2-.
3- Se incremente el valor de la variable “múltiplos” en 3, por lo que a partir de aquí, valdrá 6.
4- Se incrementa también la variable “tmp” en 3, por lo que a partir de aquí, valdrá 6.
5- Como no quedan sentencias que ejecutar en el ciclo while, se vuelve a la línea 4 para volver a comprobar si la variable “tmp” es menor o igual a 50; como es correcto se vuelve a ingresar al ciclo para ejecutar todas sus sentencias.
6- Se vuelve a imprimir el valor de “multiplos” -valor 6- y luego se incrementan las variables “multiplos” y “tmp” en 3, por lo que ambas valdrán 9 a partir de aquí.
7- Al no quedar más sentencias en el ciclo, se vuelve a comprobar si tmp es menor o igual a 50 y luego a ejecutar sus sentencias.
8- Estos pasos se repiten hasta que “multiplos” y “tmp” llegan al valor 51, dado que al comprobar si “tmp” es menor o igual a 50 el resultado será falso y se finalizará el ciclo while.
Comprendido esto, esta claro que si quitas la línea 7, el valor de “tmp” siempre será 3, por lo que la comprobación del while siempre será verdadera y se producirá un loop infinito.
Espero te sea de ayuda!