なるほど……。試してみよう。 #include <string> #include <vector> #include <utility> #include <set> #include <cstdlib> using namespace std; set<pair<int,int> > S; void f1(int a, int b, int x, int y) { if (a==0 || b==0) { S.insert(make_pair(x,y)); return; } S.insert(make_pair(a,b)); if (a<b) f1(a, b-a, x, y); else f1(a-b, b, x, y); } int f2(int c, int d) { if (c==0 || d==0) return -1; if (S.count(make_pair(c,d))