| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
为什么会TLE,在Uva上都AC,为什么在这里就会超时?!(没用什么奇怪的方法啊#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;
#define range 50000
#define range2 1000010
#define INF 0xFFFFFFF
typedef long long LL;
int prime[range],is_prime[range];
int a[range2],range_prime[range2];
int num_p;
void produce_prime()
{
memset(is_prime,0,sizeof(is_prime));
num_p=0;
for(int i=2;i<range;i++)
{
if(is_prime[i]==0)
{
int j=i+i;
prime[num_p++]=i;
while(j<range)
{
is_prime[j]=1;
j+=i;
}
}
}
}
int main()
{
// freopen("in.txt","r",stdin);
LL left,r;
produce_prime();
while(scanf("%d%d",&left,&r)==2)
{
memset(a,0,sizeof(a));
if(left==1)
{
a[0]=1;
}
for(int i=0;i<num_p;i++)
{
int k=(int)left/prime[i];
LL m=k*prime[i];
while(m<left || k<=1)
{
m+=(LL)prime[i];
k++;
}
for(LL j=m;j<=r;j+=prime[i])
{
a[j-left]=1;
}
}
int minn=INF,maxx=-1;
int minflag=-1,minf=-1,minlast=-1,maxf=-1,maxlast=-1,pre=-1;
int co=0;
for(LL i=left;i<=r;i++)
{
if(a[i-left]==0)
{
if(pre==-1)
{
pre=i;
}
else
{
if(i-pre<minn)
{
minf=pre; minlast=i;
minn=i-pre;
}
if(i-pre>maxx)
{
maxf=pre; maxlast=i;
maxx=i-pre;
}
pre=i;
}
//last=i;
}
}
if(minf==-1)
printf("There are no adjacent primes.\n");
else
printf("%d,%d are closest, %d,%d are most distant.\n",minf,minlast,maxf,maxlast);
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator