题目大意:给出两个数,a,b(均小于等于150),让他们加上一个数使得他们得到的数是素数,并且两个素数相邻,如果存在这样的数,则输出,否则,输出-1


解题思路:1)a,b均小于或等于150,那么加上后素数的差值绝对小于150
              2)存在相邻素数小于150的素数范围感觉应该不大...暴力筛一下,看到哪里的间隔会大于150;
              3)开一个数组,dis[i][j],表示两个差距为i的两个相邻素数中,较小的那个素数是dis[i]中第j小的
              4)接下来就是枚举了,先算差值m,然后套到dis[m]中求不比给定的数a,b小的最小素数,有就输出,没有就输出-1


         第一次用vector ~~~ 

代码:
 1#include <iostream>
 2#include <cstdlib>
 3#include <vector>
 4#include <algorithm>
 5#include <cstdio>
 6#include <cstring>
 7#include <cmath>
 8
 9using namespace std;
10
11bool pri[20000000];
12int pr[1500000];
13int summ,T,a,b,m,maxx;
14bool f;
15vector<int> dis[150];
16
17void prime()
18{
19    memset(pri,0,sizeof(pri));
20    for(int i=2;i<20000000;i++)
21    {
22        if(pri[i]==truecontinue;
23        for(int j=i+i;j<20000000;j+=i)
24        {
25            pri[j] = true;
26        }

27    }

28    summ=0;
29    for(int i=2;i<20000000;i++)
30    {
31        if(pri[i]) continue;
32        pr[summ] = i;
33        summ++;
34    }

35}

36
37int main()
38{
39
40    prime();
41    for(int i=0;i<summ-1;i++)
42    {
43        if(pr[i+1]-pr[i]>149continue;
44        dis[pr[i+1]-pr[i]].push_back(pr[i]);
45    }

46    cin >> T;
47    for(int i=1;i<=T;i++)
48    {
49        cin >> a >> b;
50        m=abs(a-b);
51        if (a>b) maxx=b;
52          else maxx=a;
53        f=true;
54        cout << "Case " << i << "";
55        for(int j=0;j<dis[m].size();j++)
56        {
57            if(dis[m][j]<maxx) continue;
58            cout << dis[m][j]-maxx<< endl;
59            f=false;
60            break;
61        }

62        if(f==true) cout << "-1" << endl;
63    }

64}

65