URAL 1807 (二)
int bor=sqrt((float)M),temp;
forl(i,2,bor)
{
if(!nprime[i])
{
prim.push_back(i);
for(int j=i;(temp=j*i)<=M;j++)
nprime[temp]=true;
}
}
forlec(j,bor+1,M)
{
if(!nprime[j])prim.push_back(j);
}
pra(prim,0,prim.size()-1);
}
void solve(int n)
{
rst(dp,0);
int gcd=0,div;
for(int i=2;prim[i]*prim[i]<=n;i++)
{
if(n%prim[i]) continue;
gcd=n/prim[i];
break;
}
div=n/gcd;
forl(i,1,N)
{
int k=prim[i-1];
forlec(j,1,div)
{
dp[i][j]=dp[i-1][j];
pre[i][j]=j;
}
while(k<=div)
{
forlec(j,k,div)
{
if(dp[i][j]