素数筛//O(n)
void SetPrime()
{
int i, j, num=1;
memset(tmp, true, sizeof(tmp));
for(int i=2; i<=N; i++){
if(tmp[i])
prime[num++] = i;
for(int j=1; j<=num; j++){
if(i*prime[j] > N) break;//超出范围,分析下一整数
tmp[i*prime[j]] = false;
if(i % prime[j] == 0) break;//当前素数为i的最小素因子,分析下一整数
}
}
}