//include //------------------------------------------ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define SHOW_VECTOR(v) {std::cerr << #v << "\t:";for(const auto& xxx : v){std::cerr << xxx << " ";}std::cerr << "\n";} #define SHOW_MAP(v){std::cerr << #v << endl; for(const auto& xxx: v){std::cerr << xxx.first << " " << xxx.second << "\n";}} using LL = long long; //------------------------------------------ //------------------------------------------ vector DIVOSORS(LL x) { vector ret; for (LL i = 1; i * i <= x; i++) { if (x % i == 0) { ret.push_back(i); if (x / i != i) { ret.push_back(x / i); } } } sort(ret.begin(), ret.end()); return ret; } int main() { LL N, K; cin >> N >> K; auto divisors = DIVOSORS(K); SHOW_VECTOR(divisors); LL ans = 0; for (auto x: divisors) { LL y = K / x; LL d1 = max(0LL, (x - 1) - 2 * max(0LL, (x - 1 - N))); LL d2 = max(0LL, (y - 1) - 2 * max(0LL, (y - 1 - N))); ans += d1 * d2; } cout << ans << endl; }