nyoj 169-素数 (打表)

169-素数


内存限制:64MB 时间限制:3000ms 特判: No
通过数:42 提交数:84 难度:1

题目描述:

走进世博园某信息通信馆,参观者将获得前所未有的尖端互动体验,一场充满创想和喜悦的信息通信互动体验秀将以全新形式呈现,从观众踏入展馆的第一步起,就将与手持终端密不可分,人类未来梦想的惊喜从参观者的掌上展开。

在等候区的梦想花园中,参观者便开始了他们奇妙的体验之旅,等待中的游客可利用手机等终端参与互动小游戏,与梦想剧场内的虚拟人物Kr. Kong 进行猜数比赛。当屏幕出现一个整数X时,若你能比Kr. Kong更快的发出最接近它的素数答案,你将会获得一个意想不到的礼物。

例如:当屏幕出现22时,你的回答应是23;当屏幕出现8时,你的回答应是7;若X本身是素数,则回答X;若最接近X的素数有两个时,则回答大于它的素数。

输入描述:

第一行:N   要竞猜的整数个数
接下来有N行,每行有一个正整数X
1<=N<=5   1<=X<=1000

输出描述:

输出有N行,每行是对应X的最接近它的素数

样例输入:

4
22
5
18
8

样例输出:

23
5
19
7

C/C++   AC:

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstring>
 4 #include <cstdio>
 5 #include <cmath>
 6 #include <stack>
 7 #include <set>
 8 #include <map>
 9 #include <queue>
10 #include <climits>
11 
12 using namespace std;
13 const int MY_MAX = 1010;
14 int X[MY_MAX], n;
15 
16 bool is_prime(int k)
17 {
18     if (k <= 1) return false;
19     for (int i = 2; i <= sqrt(k); ++ i)
20     {
21         if (k % i == 0) return false;
22     }
23     return true;
24 }
25 
26 void cal_X()
27 {
28     for (int i = 1; i <= 1000; ++ i)
29     {
30         for (int k = 0; ; ++ k)
31         {
32             if (is_prime(i + k))
33             {
34                 X[i] = i + k;
35                 break;
36             }
37             else if (is_prime(i - k))
38             {
39                 X[i] = i - k;
40                 break;
41             }
42         }
43     }
44 }
45 
46 int main()
47 {
48     cal_X();
49     cin >> n;
50     while (n --)
51     {
52         int temp;
53         cin >> temp;
54         cout << X[temp] <<endl;
55     }
56 }

猜你喜欢

转载自www.cnblogs.com/GetcharZp/p/9332400.html