TLE:
注意分解质因数不要写挂
for(int j=1;j<=ct&&p[j]<=x;j++)
if(!(x%p[j])){
k=0;
while(!(x%p[j])) x/=p[j],k++;
if(k&1) t[++tot]=j;
}
改为
for(int j=1;j<=ct&&p[j]*p[j]<=x;j++)
if(!(x%p[j])){
k=0;
while(!(x%p[j])) x/=p[j],k++;
if(k&1) t[++tot]=j;
}
if(x>1) t[++tot]=lower_bound(p+1,p+ct+1,x)-p;
WA:
注意 bfs 起点从 0 开始(如果你和我一样在处理输入质数的情况时,与 0 连边)
要写
for(int i=0;i<=up;i++) bfs(i);
