题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2012
题目大意:给你段连续数字,判断每个数字带入函数 n^2+n+41 是否都为素数,是输入OK,否则输出Sorry
解题思路:
写一个判断素数的函数,然后设置一个标志 p 同时遍历这段数字,如果不是素数标志 p 改变一下病并输出 Sorry, 最后遍历结束如果标志未改变,就输出OK
判断 num 是否为素数:如果大于 2 小于等于 √num 数中没有可以整除 num 的数就是素数,否则是合数,1 既不是素数也不是合数
数论基础:任何大于1的整数均可被表示成一串唯一素数之乘积
代码:
1 #include<iostream>
2 #include<cmath>
3 #include<iomanip>
4 //#include<algorithm>
5 using namespace std;
6 int num;
7 int prime(int x)
8 {
9 num = x * x + x + 41;
10 if(num == 1)
11 return 0;
12 // for(int i = 2; i < num; i ++)
13 // {
14 // if(num % i == 0)
15 // return 0;
16 // }
17 for(int i = 2; i <= sqrt(num); i ++)
18 {
19 if(num % i == 0)
20 return 0;
21 }
22 return 1;
23 }
24 int main()
25 {
26 int x, y;
27 int p;
28 while(cin >> x >> y && (x || y))
29 {
30 p = 1;
31 for(int i = x; i <= y; i ++)
32 {
33 if(!prime(i))
34 {
35 p = 0;
36 cout << "Sorry" << endl;
37 break;
38 }
39 }
40 if(p == 1)
41 cout << "OK" << endl;
42 }
43 }