/// In the name of ALLAH
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned int uint;
typedef unsigned long long ull;
#define PB push_back
#define PF push_front
#define FF first
#define SS second
#define MP make_pair
#define endl '\n'
#define all(a) (a).begin(),(a).end()
const double PI = acos(-1);
const double eps = 1e-9;
const int inf = 2000000000;
const ll infLL = 9000000000000000000;
#define MOD 1000000007
#define optimize() ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define file() freopen("input.txt","r",stdin);freopen("output.txt","w",stdout);
#define fraction() cout.unsetf(ios::floatfield); cout.precision(10); cout.setf(ios::fixed,ios::floatfield);
#define fix fixed<<setprecision(10)
int dx[]={1,-1,0,0,1,1,-1,-1};
int dy[]={0,0,1,-1,1,-1,1,-1};
ll gcd(ll a,ll b) { return __gcd(a,b); }
ll lcm(ll a,ll b) { return a*(b/__gcd(a,b)); }
/// Modular arithmetic
inline void normal(ll &a) { a %= MOD; (a < 0) && (a += MOD); }
inline ll modMul(ll a, ll b) { a %= MOD, b %= MOD; normal(a), normal(b); return (a*b)%MOD; }
inline ll modAdd(ll a, ll b) { a %= MOD, b %= MOD; normal(a), normal(b); return (a+b)%MOD; }
inline ll modSub(ll a, ll b) { a %= MOD, b %= MOD; normal(a), normal(b); a -= b; normal(a); return a; }
inline ll modPow(ll b, ll p) { ll r = 1; while(p) { if(p&1) r = modMul(r, b); b = modMul(b, b); p >>= 1; } return r; }
inline ll modInverse(ll a) { return modPow(a, MOD-2); } /// When MOD is prime.
inline ll modDiv(ll a, ll b) { return modMul(a, modInverse(b)); }
/// Policy Based Data Structure
/*
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include <ext/pb_ds/detail/standard_policies.hpp>
using namespace __gnu_pbds;
typedef tree< ll, null_type, less_equal<ll>, rb_tree_tag, tree_order_statistics_node_update > ordered_set;
*/
/// find_by_order(x) find the number in index x [ 0 based] and return an iterator at that index
/// order_of_key(y) count the numbers that are strictly less than y
/**************************************************************start**************************************************************/
const ll MX=1e8+123;
bitset<MX>is_prime;
vector<ll>prime,divisor_x;
void sieve(ll n){
n+=10;
for(ll i=3; i<=n; i+=2) is_prime[i]=1;
ll sq=sqrt(n);
for(ll i=3; i<=sq; i+=2){
if(is_prime[i]){
for(ll j=i*i; j<=n; j+=(i+i)){
is_prime[j]=0;
}
}
}
is_prime[2]=1;
prime.PB(2);
for(ll i=3; i<=n; i+=2){
if(is_prime[i]){
prime.PB(i);
}
}
return;
}
void divisor(ll n){
ll sq=sqrt(n);
for(ll i=1; i<=sq; i++){
if(n%i==0){
divisor_x.PB(i);
if(i!=(n/i)){
divisor_x.PB(n/i);
}
}
}
return;
}
ll sod(ll n){
ll ans=1LL;
for(auto it : prime){
if(it*it>n){
break;
}
if(n%it==0){
ll sum=1LL,mul=1LL;
while(n%it==0){
n/=it;
mul*=it;
sum+=mul;
}
ans*=sum;
}
}
if(n>1){
ans*=(1LL+n);
}
return ans;
}
void Solution(void){
ll n,x;
cin>>n>>x;
ll lim=1e8;
divisor(x);
map<ll,ll>mp;
for(ll i=0; i<n; i++){
ll a;
cin>>a;
mp[(sod(a))]++;
}
sort(all(divisor_x));
ll ans=0;
for(auto i : divisor_x){
for(auto j : mp){
ll value=i-j.first;
if(mp.find(value)!=mp.end()){
auto it = mp.find(value);
ll first = it->first;
ll second = it->second;
if(value==j.first){
ans+=((second*(second-1LL)));
}
else{
ans+=(1LL*second*(j.second));
}
}
}
}
cout<<(ans>>1LL)<<endl;
return;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int main(){
optimize();
// #ifndef ONLINE_JUDGE
// freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
// freopen("Error.txt", "w", stderr);
// #endif
int testcase=1;
// cin>>testcase;
for(int tc=1; tc<=testcase; tc++){
Solution();
}
return 0;
}
/// ALHAMDULILLAH
Ly8vICBJbiB0aGUgbmFtZSBvZiBBTExBSAogCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKdHlwZWRlZiBsb25nIGxvbmcgbGw7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVsbDsKIAojZGVmaW5lIFBCIHB1c2hfYmFjawojZGVmaW5lIFBGIHB1c2hfZnJvbnQKI2RlZmluZSBGRiBmaXJzdAojZGVmaW5lIFNTIHNlY29uZAojZGVmaW5lIE1QIG1ha2VfcGFpcgojZGVmaW5lIGVuZGwgJ1xuJwojZGVmaW5lIGFsbChhKSAoYSkuYmVnaW4oKSwoYSkuZW5kKCkKIApjb25zdCBkb3VibGUgUEkgPSBhY29zKC0xKTsKY29uc3QgZG91YmxlIGVwcyA9IDFlLTk7CmNvbnN0IGludCBpbmYgPSAyMDAwMDAwMDAwOwpjb25zdCBsbCBpbmZMTCA9IDkwMDAwMDAwMDAwMDAwMDAwMDA7CiNkZWZpbmUgTU9EIDEwMDAwMDAwMDcKIAojZGVmaW5lIG9wdGltaXplKCkgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTtjaW4udGllKDApO2NvdXQudGllKDApOwojZGVmaW5lIGZpbGUoKSBmcmVvcGVuKCJpbnB1dC50eHQiLCJyIixzdGRpbik7ZnJlb3Blbigib3V0cHV0LnR4dCIsInciLHN0ZG91dCk7CiNkZWZpbmUgZnJhY3Rpb24oKSBjb3V0LnVuc2V0Zihpb3M6OmZsb2F0ZmllbGQpOyBjb3V0LnByZWNpc2lvbigxMCk7IGNvdXQuc2V0Zihpb3M6OmZpeGVkLGlvczo6ZmxvYXRmaWVsZCk7CiNkZWZpbmUgZml4IGZpeGVkPDxzZXRwcmVjaXNpb24oMTApCiAKaW50IGR4W109ezEsLTEsMCwwLDEsMSwtMSwtMX07CmludCBkeVtdPXswLDAsMSwtMSwxLC0xLDEsLTF9OwogCmxsIGdjZChsbCBhLGxsIGIpIHsgcmV0dXJuIF9fZ2NkKGEsYik7IH0KbGwgbGNtKGxsIGEsbGwgYikgeyByZXR1cm4gYSooYi9fX2djZChhLGIpKTsgfQoKLy8vIE1vZHVsYXIgYXJpdGhtZXRpYwppbmxpbmUgdm9pZCBub3JtYWwobGwgJmEpIHsgYSAlPSBNT0Q7IChhIDwgMCkgJiYgKGEgKz0gTU9EKTsgfQppbmxpbmUgbGwgbW9kTXVsKGxsIGEsIGxsIGIpIHsgYSAlPSBNT0QsIGIgJT0gTU9EOyBub3JtYWwoYSksIG5vcm1hbChiKTsgcmV0dXJuIChhKmIpJU1PRDsgfQppbmxpbmUgbGwgbW9kQWRkKGxsIGEsIGxsIGIpIHsgYSAlPSBNT0QsIGIgJT0gTU9EOyBub3JtYWwoYSksIG5vcm1hbChiKTsgcmV0dXJuIChhK2IpJU1PRDsgfQppbmxpbmUgbGwgbW9kU3ViKGxsIGEsIGxsIGIpIHsgYSAlPSBNT0QsIGIgJT0gTU9EOyBub3JtYWwoYSksIG5vcm1hbChiKTsgYSAtPSBiOyBub3JtYWwoYSk7IHJldHVybiBhOyB9CmlubGluZSBsbCBtb2RQb3cobGwgYiwgbGwgcCkgeyBsbCByID0gMTsgd2hpbGUocCkgeyBpZihwJjEpIHIgPSBtb2RNdWwociwgYik7IGIgPSBtb2RNdWwoYiwgYik7IHAgPj49IDE7IH0gcmV0dXJuIHI7IH0KaW5saW5lIGxsIG1vZEludmVyc2UobGwgYSkgeyByZXR1cm4gbW9kUG93KGEsIE1PRC0yKTsgfSAgLy8vIFdoZW4gTU9EIGlzIHByaW1lLgppbmxpbmUgbGwgbW9kRGl2KGxsIGEsIGxsIGIpIHsgcmV0dXJuIG1vZE11bChhLCBtb2RJbnZlcnNlKGIpKTsgfQoKLy8vIFBvbGljeSBCYXNlZCBEYXRhIFN0cnVjdHVyZSAKLyoKI2luY2x1ZGUgPGV4dC9wYl9kcy9hc3NvY19jb250YWluZXIuaHBwPgojaW5jbHVkZSA8ZXh0L3BiX2RzL3RyZWVfcG9saWN5LmhwcD4KI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvc3RhbmRhcmRfcG9saWNpZXMuaHBwPgp1c2luZyBuYW1lc3BhY2UgX19nbnVfcGJkczsKdHlwZWRlZiB0cmVlPCBsbCwgbnVsbF90eXBlLCBsZXNzX2VxdWFsPGxsPiwgcmJfdHJlZV90YWcsIHRyZWVfb3JkZXJfc3RhdGlzdGljc19ub2RlX3VwZGF0ZSA+IG9yZGVyZWRfc2V0OyAKKi8KLy8vIGZpbmRfYnlfb3JkZXIoeCkgZmluZCB0aGUgbnVtYmVyIGluICBpbmRleCB4IFsgMCBiYXNlZF0gYW5kIHJldHVybiBhbiBpdGVyYXRvciBhdCB0aGF0IGluZGV4Ci8vLyBvcmRlcl9vZl9rZXkoeSkgY291bnQgdGhlIG51bWJlcnMgdGhhdCBhcmUgc3RyaWN0bHkgbGVzcyB0aGFuIHkKCiAKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqc3RhcnQqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCmNvbnN0IGxsIE1YPTFlOCsxMjM7CmJpdHNldDxNWD5pc19wcmltZTsKdmVjdG9yPGxsPnByaW1lLGRpdmlzb3JfeDsKCnZvaWQgc2lldmUobGwgbil7CiAgICBuKz0xMDsKICAgIGZvcihsbCBpPTM7IGk8PW47IGkrPTIpIGlzX3ByaW1lW2ldPTE7CiAgICBsbCBzcT1zcXJ0KG4pOwogICAgZm9yKGxsIGk9MzsgaTw9c3E7IGkrPTIpewogICAgICAgIGlmKGlzX3ByaW1lW2ldKXsKICAgICAgICAgICAgZm9yKGxsIGo9aSppOyBqPD1uOyBqKz0oaStpKSl7CiAgICAgICAgICAgICAgICBpc19wcmltZVtqXT0wOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgaXNfcHJpbWVbMl09MTsKICAgIHByaW1lLlBCKDIpOwogICAgZm9yKGxsIGk9MzsgaTw9bjsgaSs9Mil7CiAgICAgICAgaWYoaXNfcHJpbWVbaV0pewogICAgICAgICAgICBwcmltZS5QQihpKTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm47Cn0KCnZvaWQgZGl2aXNvcihsbCBuKXsKICAgIGxsIHNxPXNxcnQobik7CiAgICBmb3IobGwgaT0xOyBpPD1zcTsgaSsrKXsKICAgICAgICBpZihuJWk9PTApewogICAgICAgICAgICBkaXZpc29yX3guUEIoaSk7CiAgICAgICAgICAgIGlmKGkhPShuL2kpKXsKICAgICAgICAgICAgICAgIGRpdmlzb3JfeC5QQihuL2kpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuOwp9CgpsbCBzb2QobGwgbil7CiAgICBsbCBhbnM9MUxMOwogICAgZm9yKGF1dG8gaXQgOiBwcmltZSl7CiAgICAgICAgaWYoaXQqaXQ+bil7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBpZihuJWl0PT0wKXsKICAgICAgICAgICAgbGwgc3VtPTFMTCxtdWw9MUxMOwogICAgICAgICAgICB3aGlsZShuJWl0PT0wKXsKICAgICAgICAgICAgICAgIG4vPWl0OwogICAgICAgICAgICAgICAgbXVsKj1pdDsKICAgICAgICAgICAgICAgIHN1bSs9bXVsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGFucyo9c3VtOwogICAgICAgIH0gICAgICAgCiAgICB9CiAgICBpZihuPjEpewogICAgICAgIGFucyo9KDFMTCtuKTsKICAgIH0KICAgIHJldHVybiBhbnM7Cn0KCnZvaWQgU29sdXRpb24odm9pZCl7CiAgICAKICAgIGxsIG4seDsKICAgIGNpbj4+bj4+eDsKCiAgICBsbCBsaW09MWU4OwoKICAgIGRpdmlzb3IoeCk7CiAgICBtYXA8bGwsbGw+bXA7CgogICAgZm9yKGxsIGk9MDsgaTxuOyBpKyspewogICAgICAgIGxsIGE7CiAgICAgICAgY2luPj5hOwogICAgICAgIG1wWyhzb2QoYSkpXSsrOwogICAgfQoKICAgIHNvcnQoYWxsKGRpdmlzb3JfeCkpOwoKICAgIGxsIGFucz0wOwoKICAgIGZvcihhdXRvIGkgOiBkaXZpc29yX3gpewogICAgICAgIGZvcihhdXRvIGogOiBtcCl7CiAgICAgICAgICAgIGxsIHZhbHVlPWktai5maXJzdDsKICAgICAgICAgICAgaWYobXAuZmluZCh2YWx1ZSkhPW1wLmVuZCgpKXsKICAgICAgICAgICAgICAgIGF1dG8gaXQgPSBtcC5maW5kKHZhbHVlKTsKICAgICAgICAgICAgICAgIGxsIGZpcnN0ID0gaXQtPmZpcnN0OwogICAgICAgICAgICAgICAgbGwgc2Vjb25kID0gaXQtPnNlY29uZDsKICAgICAgICAgICAgICAgIGlmKHZhbHVlPT1qLmZpcnN0KXsKICAgICAgICAgICAgICAgICAgICBhbnMrPSgoc2Vjb25kKihzZWNvbmQtMUxMKSkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZXsKICAgICAgICAgICAgICAgICAgICBhbnMrPSgxTEwqc2Vjb25kKihqLnNlY29uZCkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgCiAgICBjb3V0PDwoYW5zPj4xTEwpPDxlbmRsOwogICAgcmV0dXJuOwp9CgoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCgoKaW50IG1haW4oKXsKICAgIAogICAgb3B0aW1pemUoKTsKICAgIAovLyAgICAjaWZuZGVmIE9OTElORV9KVURHRQovLyAgICAgICAgZnJlb3BlbigiaW5wdXQudHh0IiwgInIiLCBzdGRpbik7Ci8vICAgICAgICBmcmVvcGVuKCJvdXRwdXQudHh0IiwgInciLCBzdGRvdXQpOwovLyAgICAgICAgZnJlb3BlbigiRXJyb3IudHh0IiwgInciLCBzdGRlcnIpOwovLyAgICAjZW5kaWYKCiAgICBpbnQgdGVzdGNhc2U9MTsKLy8gICAgY2luPj50ZXN0Y2FzZTsKCiAgICBmb3IoaW50IHRjPTE7IHRjPD10ZXN0Y2FzZTsgdGMrKyl7CiAgICAgICAgU29sdXRpb24oKTsKICAgIH0KICAgIAogICAgcmV0dXJuIDA7Cn0KCi8vLyBBTEhBTURVTElMTEFI