sgu 117 Counting
题意:略。
分解质因数。
#include <iostream> #include <cstdio> #include <cmath> #include <algorithm> #include <vector> #include <iomanip> #include <cstring> #include <map> #include <queue> #include <set> #include <cassert> using namespace std; const double EPS=1e-8; const int SZ=10030,INF=0x7FFFFFFF; typedef long long lon; bool p[SZ]; vector<int> pri; void init() { memset(p,1,sizeof(p)); for(int i=2;i<SZ;++i) { if(p[i]) { for(int j=i*i;j<SZ;j+=i)p[j]=0; pri.push_back(i); } } } map<int,int> get(int x,int delta) { map<int,int> res; for(int i=0;x!=1;++i) { // if(p[x]) // { // res[x]=delta; // return res; // } // else { for(;x%pri[i]==0;x/=pri[i],res[pri[i]]+=delta); } } return res; } bool inc(map<int,int> x,map<int,int> y) { for(auto it=x.begin();it!=x.end();++it) { if(y[it->first]<it->second)return 0; } return 1; } int main() { std::ios::sync_with_stdio(0); //freopen("d:\\1.txt","r",stdin); int n,m,k; cin>>n>>m>>k; init(); auto mpk=get(k,1); int res=0; for(int i=0;i<n;++i) { int tmp; cin>>tmp; auto mpt=get(tmp,m); if(inc(mpk,mpt))++res; } cout<<res<<endl; return 0; }