I have two numbers $N$ and $M$. I efficiently want to calculate how many pairs of $a$,$b$ are there such that $1 \leq a \leq N$ and $1 \leq b \leq M$ and $ab$ is a perfect square.
I know the obvious $N*M$ algorithm to compute this. But i want something better than that. I think it can be done in a better time may $\operatorname{O}(m+n)$ or something like that but calculating new pairs directly from previous pairs rather than iterating over all $a$ and $b$. Thanks for any help in advance. A pseudo code will be more helpful.
Step 1:
Write a function $f$ that takes a perfect square $x$ and returns a list of all (or just the number of) possible pairs $(a,b)$ such that $ab = x$.
Step 2:
Have the function $f$ iterate over the squares of the integers $1$ to $n$, where $n = \lfloor\sqrt{M*N}\rfloor$ and count the results as you go.