记录编号 |
58026 |
评测结果 |
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA |
题目名称 |
数数 |
最终得分 |
100 |
用户昵称 |
digital-T |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.409 s |
提交时间 |
2013-04-16 11:35:18 |
内存使用 |
3.29 MiB |
显示代码纯文本
#include<fstream>
#include<vector>
using namespace std;
ifstream fi("counta.in");
ofstream fo("counta.out");
int n,m,k,a,sum=0;
vector <int> su;
int aa[1250],kk[1250];//质因数分解a,k
void check(int x)
{
for(int ii=1;ii<=su.size()-1;ii++)
if(x%su[ii]==0)
return;
su.push_back(x);
}
int main()
{
fi>>n>>m>>k;
int i,j,o,lenk;
bool flag;
su.push_back(1);//有一个
//求10001内素数,据说有1230个
su.push_back(2);//第一个素数2
for(i=3;i<=10001;i++)check(i);//找出3~10001其它素数
//=======================================================分解k
j=1;
while(su[j]<k)j++;lenk=j;
if(su[j]==k)//尼玛k是个素数
{
kk[j]=1;
for(i=1;i<j;i++)kk[i]=0;
}
for(i=1;i<=j;i++)
{
if(k%su[i]!=0)
{
kk[i]=0;
goto NEXT;
}
o=su[i];kk[i]=1;
while(k>=o&&k%o==0)
{
kk[i]++;
o*=su[i];
}
kk[i]--;
//fo<<su[i]<<' '<<kk[i]<<endl;
NEXT:;
}
//for(i=1;i<=j;i++)fo<<kk[i]<<endl;===========================
for(int wtf=1;wtf<=n;wtf++)
{
fi>>a;
for(i=1;i<=lenk;i++)
{
if(su[i]>a||a%su[i]!=0)
{
aa[i]=0;
goto NEXT2;
}
o=su[i];aa[i]=1;
while(a>=o&&a%o==0)
{
aa[i]++;
o*=su[i];
}
aa[i]--;
NEXT2:;
//fo<<aa[i]<<' ';
}//fo<<endl;
//==================================================分解a
flag=true;
for(i=1;i<=lenk;i++)if(aa[i]*m<kk[i])goto NEXT3;
sum++;
NEXT3:;
}
fo<<sum;
return 0;
}