Hola cluster,
YO diría que es la D:
Te explico. Si te das cuenta, en cada iteración del bucle while, decrementas x ( que vale M ) de N en N ( que es Y ) y sumas uno en Z. Supongamos entonces cero iteraciones:
z = 0, x = M, y = N, con lo que z*y + x = M, se cumple. Supongamos ahora una iteracion:
z = 1, x = M - N, y = N, con lo que z*y+x = 1 * N + ( M - N ) = N + M - N = M.
Supongamos dos iteraciones: z = 2, x = M - 2N, y = N. --> z*y + x = 2*N + ( M - 2N ) = 2N + M - 2N = M, y así sucesivamente.
Espero que te sirva, si no es, para encontrar la respuesta.
Saludos!