積が平方数になるような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(); } };