class Solution {
public:
bool pd(int x)
{
if(x<2) return 0;
for(int i=2;i*i<=x;i++)
{
if(x%i==0) return 0;
}
return 1;
}
int nonSpecialCount(int l, int r) {
if(sqrt(l)==int(sqrt(l))&&pd(sqrt(l))) l++;
for(int i=sqrt(l)+1;i<=sqrt(r);i++)
{
if(pd(i)) l++;
}
return r-l+1;
}
};
只需要判断l到r之间有几个素数的平方数就好了
唯一需要注意的是端点l的特判
还有就是理论上定义一个ans专门用于返回可能好理解一点
不过我找了一个小小的规律,每次满足条件让l++,然后返回r-l+1也能得到答案(其实完全没必要,不方便理解)