非质数的一个性质:
必定有一个因子大于它的算术平方根。
该性质有范围限制,一般情况下都可以使用。以后数学家们再扩张。
碰到质数的一般做法:假定范围为[1,n]
1、预处理1-√n的质数,存入数组p中
2、对于[1-n]里的数,用数组p筛质数
bool vis[NN];
ll prime[NN];
ll kk=0;
void init()
{
for(int i=2;i<NN;i++)
{
if(vis[i]==0)
{
prime[kk++]=i;
for(int j=i+i;j<NN;j+=i)
vis[j]=1;
}
}
}
bool isprime(ll x)
{
if(x==2)return 1;
if(x<2)return 0;
for(int i=0;i<kk;i++)
{
ll &y=prime[i];
if(y*y>x)break;
if(x%y==0)return 0;
}
return 1;
}
void solve()
{
init();
while(cin>>n>>m)
{
v.clear();
ll mn=0x3f3f3f3f3f,mx=0;
ll p=-1,pp=-1;
for(int i=n;i<=m;i++)
{
if(isprime(i))
{
if(v.size())
{
if(i-v.back()>mx)mx=i-v.back(),p=v.size();
if(i-v.back()<mn)mn=i-v.back(),pp=v.size();
}
v.push_back(i);
}
}
if(p!=-1)
{
cout<<v[pp-1]<<","<<v[pp]<<" are closest, ";
cout<<v[p-1]<<","<<v[p]<<" are most distant.";
}
else
{
cout<<"There are no adjacent primes.";
}
cout<<'\n';
}
}