Enumerar los puntos de la cuadrícula en el plano 2D con orden descendente de (x * y)

DadoN > 0 yM > 0, Quiero enumerar todos los pares (x, y) de modo que 1 <= x <= N y 1 <= y <= M en orden descendente de (x * y). Un ejemplo: dado N = 3 y M = 2, la secuencia de enumeración debe ser:

1. (3, 2) -- 3 * 2 = 6
2. (2, 2) -- 2 * 2 = 4
3. (3, 1) -- 3 * 1 = 3
4. (2, 1) -- 2 * 1 = 2
5. (1, 2) -- 1 * 2 = 2
6. (1, 1) -- 1 * 1 = 1

El orden de(2, 1) y(1, 2) Podrían intercambiarse. Una forma obvia es listarlos a todos, insertarlos en unvector<pair<int, int> >, y llamastd::sort() Con mi propia función de comparación. Sin embargo, dado que N y M pueden ser grandes, y la mayoría de las veces solo necesito los primeros términos de la secuencia, espero que pueda haber alguna forma más inteligente que genere tal secuencia en lugar de generarlas todas y cada una de ellas, lo que requiere tantos comoN*M elementos de la matriz.

Actualizar: Olvidé mencionar que aunque la mayoría del tiempo solo necesito los primeros términos, el número de términos requeridos es desconocido antes de la enumeración.

Respuestas a la pregunta(8)

Su respuesta a la pregunta