#include #include #include using namespace std; #define SET_SIZE_MAX 10000 #define SMAX 50 #define KMAX (SMAX/2) // to avoid memory limit. class NumSet { public: char A[KMAX], nelem; NumSet() : nelem(0) {} void push( char c ) { A[nelem++] = c; } void pop() { nelem--; } int size() const { return nelem; } bool operator < ( const NumSet &s ) const { for ( int i = 0; i < nelem; i++ ) if ( A[i] < s.A[i] ) return true; else if ( A[i] > s.A[i] ) return false; return false; } }; int K, S; void generateSets( vector &M, int cursor, set &NS, NumSet &nsbuf ) { if ( NS.size() == SET_SIZE_MAX ) return; if ( nsbuf.size() == K ) { NS.insert(nsbuf); return; } if ( (int)M.size() - cursor + nsbuf.size() < K ) return; for ( int i = 0; cursor+i < M.size(); i++ ) { nsbuf.push(M[cursor+i]); generateSets(M, cursor+i+1, NS, nsbuf); nsbuf.pop(); } } void addSet( set &NS, int D ) { vector M; for ( int i = 1; i*D <= S; i++ ) M.push_back(i*D); if ( M.size() < K ) return; NumSet nsbuf; generateSets(M, 0, NS, nsbuf); } int main() { cin >> K >> S; set NS; for ( int d = 2; d <= S; d++ ) addSet(NS, d); cout << NS.size() << endl; return 0; }