博客园 首页 私信博主 显示目录 隐藏目录 管理 动画

UVA10140 Prime Distance

 1 #include<iostream>
 2 #include<cstring>
 3 using namespace std;
 4 const int maxn=1e6+10;
 5  
 6 long long l,r,prime[maxn],vis[maxn],p[maxn],a[maxn];
 7 int tot=0;
 8 
 9 int pre(long long n)
10 {
11     for(int i=2;i<=n;i++)
12     {
13         if(!vis[i])
14         {
15             vis[i]=i;
16             prime[++tot]=i;
17         }
18         for(int j=1;j<=tot;j++)
19         {
20             if(i*prime[j]>n)
21             {
22                 break;
23             }
24             if(prime[j]>vis[i])
25             {
26                 break;
27             }
28             vis[i*prime[j]]=prime[j];
29         }
30     }
31 }
32 int main()
33 {
34     pre(5e4+10);
35     while(cin>>l>>r)
36     {
37         memset(p,0,sizeof(p));
38         if(l==1)
39         {
40             l=2;
41         }
42         long long cnt=0,min1,min2,max1,max2,minn=0x3f3f3f3f,maxx=-0x3f3f3f3f;
43         for(int j=1;j<=tot;j++)
44         {
45             for(int i=l/prime[j];i<=r/prime[j];i++)
46             {
47                 while(i<=1)
48                 {
49                     i++;
50                 }
51                 if(prime[j]*i<l||prime[j]*i>r)
52                 {
53                     continue;
54                 }
55                 p[prime[j]*i-l]=1;
56             }  
57         }
58         for(int i=l;i<=r;i++)
59         {
60             if(p[i-l]==0)
61             {
62                 a[++cnt]=i;
63             }
64         }
65         if(cnt<=1)
66         {
67             //cout<<cnt<<endl;
68             cout<<"There are no adjacent primes."<<endl;
69             continue;
70         }
71         for(int i=1;i<=cnt-1;i++)
72         {
73             if(a[i+1]-a[i]<minn)
74             {
75                 minn=a[i+1]-a[i];
76                 min1=a[i+1];
77                 min2=a[i];
78             }
79             if(a[i+1]-a[i]>maxx)
80             {
81                 maxx=a[i+1]-a[i];
82                 max1=a[i+1];
83                 max2=a[i];
84             }
85         }
86         //cout<<cnt<<endl;
87         cout<<min2<<","<<min1<<" are closest, "<<max2<<","<<max1<<" are most distant."<<endl;
88     }
89     return 0;
90 }

 

posted @ 2019-07-23 21:00  2529102757  阅读(131)  评论(0编辑  收藏  举报