#include <iostream> #include <algorithm> #include <cmath> using namespace std; const int N1(30009),N2(20); int M[N1]={0},m[N2]={0},num[N2]={0}; void trans(int x,int k) { int t(x); for(int i=2;i<=t;i++) while(x%i==0) { x/=i; M[i]++; } if(x==t) M[x]++; for(int i=1;i<=t;i++) if(M[i]) { m[0]++;num[0]++; m[m[0]]=i; num[num[0]]=M[i]; num[num[0]]*=k; } } int main() { int n,m1,m2,x,ans(0x7ffffff); cin>>n>>m1>>m2; if(m1==1) { cout<<0<<endl; return 0; } trans(m1,m2);bool find(false); for(int p=1;p<=n;p++) { cin>>x; int t(0),i; for(i=1;i<=m[0];i++) { int t2(num[i]); if(x%m[i]==0) { for(int j=2;j<=num[i]+1;j++) { int q=(int)pow((double)m[i],(double)j); if(x%q) { t2=(int)ceil(num[i]/((j-1)*1.0)); break; } } } else break; t=max(t,t2); } if(i>m[0]) { ans=min(ans,t); find=true; } } if(find==false) cout<<-1; else cout<<ans; cout<<endl; return 0; } /************************************************************** Problem: 2286 User: admin Language: C++ Result: Accepted Time:83 ms Memory:2444 kb ****************************************************************/