#include <bits/stdc++.h>
using namespace std;
inline int rdi() {
  int d;
  scanf("%d", &d);
  return d;
}
inline char rdc() {
  scanf(" ");
  return getchar();
}
inline string rds() {
  string s;
  cin >> s;
  return s;
}
inline double rddb() {
  double d;
  scanf("%lf", &d);
  return d;
}
template <class T>
inline bool setmin(T& a, T b) {
  return a > b ? a = b, true : false;
}
template <class T>
inline bool setmax(T& a, T b) {
  return a < b ? a = b, true : false;
}
struct debugger {
  template <typename T>
  debugger& operator,(const T& x) {
    cerr << x << ",";
    return *this;
  }
} dbgr;
const int MAXN = 40100;
char str[MAXN];
int m, n, a[MAXN];
int b[10 * MAXN];
int main() {
  while (scanf("%d%s", &m, str) == 2) {
    n = strlen(str);
    for (int i = 0; i < n; i++) a[i] = str[i] - '0';
    memset(b, 0, sizeof b);
    for (int i = (0); i < (n); ++i) {
      int s = 0;
      for (int j = (i); j < (n); ++j) {
        s += a[j];
        ++b[s];
      }
    }
    long long ans = 0;
    for (int i = (0); i < (n); ++i) {
      int s = 0;
      for (int j = (i); j < (n); ++j) {
        s += a[j];
        if (s > 0 && m % s == 0 && m / s <= n * 9)
          ans += b[m / s];
        else if (s == 0 && m == 0)
          ans += (n * (n + 1) / 2);
      }
    }
    cout << ans << endl;
  }
  return 0;
}
