比赛 |
20100927 |
评测结果 |
WAAWAWTWWW |
题目名称 |
细胞分裂 |
最终得分 |
30 |
用户昵称 |
Citron酱 |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2010-09-27 21:56:01 |
显示代码纯文本
#include <fstream>
#include <cmath>
#define I_F "cell.in"
#define O_F "cell.out"
#define MAX 10000
using namespace std;
int n,m1,m2,pnl,pl=1,ans=MAX;
int p[MAX]={2};
int pn[MAX];
int pns[MAX];
ifstream fin(I_F);
void Getp();
void Getpy(long x, int &l, int n[MAX], int s[MAX]);
void Input();
bool Pd(int &l, int n[MAX], int s[MAX]);
void Search();
void Output();
int main()
{
Input();
Search();
Output();
return 0;
}
void Getp()
{
int i,j;
bool flag;
for (i=3; i<m1; i+=2)
{
flag=true;
for (j=0; ((j<pl)&&(p[j]<=sqrt((double)i))); j++)
if (i%p[j]==0)
{
flag=false;
break;
}
if (flag)
p[pl++]=i;
}
}
void Getpy(long x, int &l, int n[MAX], int s[MAX])
{
int i;
l=0;
int t=x;
for (i=0; ((i<pl)&&(p[i]<=x)); i++)
if (t%p[i]==0)
{
n[l]=p[i];
s[l]=0;
do
{
s[l]++;
t/=p[i];
} while (t%p[i]==0);
l++;
}
}
void Input()
{
int i;
fin>>n>>m1>>m2;
Getp();
Getpy(m1,pnl,pn,pns);
for (i=0; i<pnl; pns[i++]*=m2);
}
bool Pd(int &l, int n[MAX], int s[MAX])
{
bool flag=false;
int i,j=0;
for (i=0; i<pnl; i++)
{
for (; ((j<l)&&(n[j]<pn[i])); j++);
if ((s[j]<pns[i])||(j>=l)||(n[j]!=pn[i]))
{
if ((!flag)&&(s[j]==0))
l=0;
return false;
}
else
flag=true;
}
return true;
}
void Search()
{
int i,j;
long s;
int snl;
int sn[MAX];
int sns[MAX];
int t;
for (i=0; i<n; i++)
{
fin>>s;
Getpy(s,snl,sn,sns);
t=1;
while (!Pd(snl,sn,sns))
{
if (snl==0)
{
t=MAX;
break;
}
t++;
for (j=0; j<snl; sns[j++]*=2);
}
if (t<ans)
ans=t;
}
fin.close();
}
void Output()
{
ofstream fout(O_F);
if (ans==MAX)
fout<<"-1\n";
else
fout<<ans<<'\n';
fout.close();
}