#include #include #pragma GCC target("avx2") #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") using namespace std; using namespace atcoder; #define rep(i, n) for (int i = 0; i < (int)(n); i++) #define repll(i, n) for (long long i = 0; i < (long long)(n); i++) #define rep2(i, n, m) for (int i = n; i < (int)(m); i++) #define repll2(i, n, m) for (long long i = n; i < (long long)(m); i++) #define all(v) v.begin(),v.end() using ll=long long; using ld=long double; using vi=vector; using vvi=vector; using vvvi=vector; using vl=vector; using vvl=vector; using vvvl=vector; using vld=vector; using vvld=vector; int dx[8]={1,0,-1,0,1,1,-1,-1}; int dy[8]={0,1,0,-1,1,-1,1,-1}; const double PI = acos(-1); //const ll MOD=1e9+7; //const ll MOD=998244353; const ll INF=(1LL<<60); const int INF2=(1<<30); //using mint=modint1000000007; //using mint=modint998244353; pair calc(ll n,ll p){ //nは何回pで割り切れるか? //最終的なmodも求める ll c=0; while((n%p)==0){ c++; n/=p; } return {c,n}; } int main() { ios::sync_with_stdio(false); std::cin.tie(nullptr); ll n,p;cin>>n>>p; vl cnt(30,0); ll M=0; ll now=1; while(now<1e9){ now*=p; M++; } vector>> cnt_mod(30,vector>(M)); rep(i,n){ ll a;cin>>a; auto pp=calc(a,p); ll k=pp.first,mod=pp.second; //cout<