#include <bits/stdc++.h>
using namespace std;
const int MX = 4e6 + 69;
const long long inf = 1e18 + 69;
const long long mod = (1 << 31) - 1;
const long double eps = 1e-7;
int a[MX];
int f[MX];
map<int, int> hashy;
long long pre[MX];
vector<long long> pp;
int c[44], b[44];
long long sgt[MX];
long long n, k;
void build(int x, int l, int r) {
  if (l > r) {
    return;
  }
  if (l == r) {
    sgt[x] = a[l] % k;
    return;
  }
  int mid = (l + r) / 2;
  build(2 * x, l, mid);
  build(2 * x + 1, mid + 1, r);
  sgt[x] = (sgt[2 * x] * sgt[2 * x + 1]);
  sgt[x] = (sgt[x] + k) % k;
}
long long query(int x, int l, int r, int st, int en) {
  if (l > r || l > en || r < st) {
    return 1;
  }
  if (l >= st && r <= en) {
    return sgt[x];
  }
  int mid = (l + r) / 2;
  long long ans =
      query(2 * x, l, mid, st, en) * query(2 * x + 1, mid + 1, r, st, en);
  ans = (ans + k) % k;
  return ans;
}
int main() {
  cin >> n >> k;
  for (int i = 1; i <= n; i++) {
    scanf("%d", &a[i]);
  }
  long long ans = 0;
  if (k == 1) {
    cout << n * (n + 1) / 2;
    return 0;
  }
  build(1, 1, n);
  int st = 1, en = 1;
  while (en <= n) {
    while (en <= n && query(1, 1, n, st, en)) {
      en++;
    }
    if (!query(1, 1, n, st, en)) {
      ans += (n - en + 1);
    }
    st++;
  }
  cout << ans;
  return 0;
}
