積が平方数になるような2つの数を考えればいい。
class TheSquareRootDilemma {
public:
int countPairs(int N, int M)
{
set< pair<int, int> > cnt;
for (int i = 1; i <= N; ++i) {
for (int j = 1; i * j * j <= N; ++j) {
for (int k = 1; i * k * k <= M; ++k) {
cnt.insert(make_pair(i * j * j, i * k * k));
}
}
}
return cnt.size();
}
};