POJ2689
#include<iostream>
using namespace std;
#define maxn 1047483640
bool prime[maxn];
int main()
{
long long m,n;
long long min_x,min_y,max_x,max_y;
int max=-1;
int min=1e9;
int dis;
long long pre=0;
bool cnt=true;
cin>>m>>n;
for(int i=2;i<n;i++)
{
if(i%2==0)prime[i]=false;
else
{
prime[i]=true;
}
}
prime[2]=true;
for(int i=3;i*i<=n;i+=2)
{
if(prime[i])
{
for(int j=i+i;j<n;j+=i)
{
prime[j]=false;
}
}
}
for(int i=m;i<=n;i++)
{
if(prime[i]&&cnt)
{
pre=i;
cnt=false;
continue;
}
if(prime[i]&&!cnt)
{
dis=i-pre;
if(dis>max)
{
max_x=pre;
max_y=i;
max=dis;
}
if(dis<min)
{
min_x=pre;
min_y=i;
min=dis;
}
pre=i;
}
}
if(min==1e9)cout<<"There are no adjacent primes."<<endl;
else
{
cout<<min_x<<","<<min_y<<" are closest, "<<max_x<<","<<max_y<<" are most distant."<<endl;
}
return 0;
}
POJ3978
#include<iostream>
using namespace std;
#define maxn 21474836
bool prime[maxn];
int main()
{
int n,m;
while(cin>>m>>n)
{
if(m==-1&&n==-1)break;
for(int i=0;i<n;i++)
{
if(i%2==0)prime[i]=false;
else
{
prime[i]=true;
}
}
prime[2]=true;
prime[1]=false;
for(int i=3;i*i<=n;i+=2)
{
if(prime[i])
{
for(int j=i+i;j<n;j+=i)
{
prime[j]=false;
}
}
}
int cnt=0;
for(int i=m;i<=n;i++)
{
if(prime[i])cnt++;
}
cout<<cnt<<endl;
}
return 0;
}
POJ2262
#include<iostream>
using namespace std;
#define maxn 21474836
bool prime[maxn];
int main()
{
int n=1000000;
for(int i=2;i<n;i++)
{
if(i%2==0)prime[i]=false;
else
{
prime[i]=true;
}
}
prime[2]=true;
for(int i=3;i*i<=n;i+=2)
{
if(prime[i])
{
for(int j=i+i;j<n;j+=i)
{
prime[j]=false;
}
}
}
int num;
while(cin>>num&&num)
{
for(int i=2;i<=num;i++)
{
if(prime[i]&&prime[num-i])
{
cout<<num<<" = "<<i<<" + "<<num-i<<endl;
break;
}
}
}
return 0;
}
POJ3001
#include<iostream>
using namespace std;
#define maxn 21474836
bool prime[maxn];
int main()
{
int n=10000000;
for(int i=2;i<n;i++)
{
if(i%2==0)prime[i]=false;
else
{
prime[i]=true;
}
}
prime[2]=true;
for(int i=3;i*i<=n;i+=2)
{
if(prime[i])
{
for(int j=i+i;j<n;j+=i)
{
prime[j]=false;
}
}
}
int a,d,m;
while(cin>>a>>d>>m)
{
if(a==0&&d==0&&m==0)break;
int cnt=0;
for(int i=a;i<1000000;i+=d)
{
if(prime[i])
{
cnt++;
if(cnt==m)
{
cout<<i<<endl;
break;
}
}
}
}
return 0;
}