#include #include using namespace std; typedef vector> mat; // (m,n),(p,q) -> (m*p,n*q) で反転あり mat matrix_tensor_product(mat a,mat b){ int m = a.size(); int n = a[0].size(); int p = b.size(); int q = b[0].size(); mat ret(m*p,vector(n*q)); int i,j,l,r; for(i=0;i(pw(p,y))); for(i=0;i v[MX + 10]; int main(){ std::ios_base::sync_with_stdio(false); std::cin.tie(nullptr); int i,j,h,w; cin >> h >> w; for(i=1;i<=h*w;i++){ v[gcd(h*w,i)].push_back(i); } mat m(1,vector(1,1)); int H = h,W = w; for(i=2;i<=MX;i++){ if(H%i==0 || W%i==0){ int c = 0,d = 0; while(H%i==0){ c++; H /= i; } while(W%i==0){ d++; W /= i; } mat m2 = createMat(c,d,i); m = matrix_tensor_product(m,m2); } } for(i=0;i