Fork me on GitHub

HDU 2012 (水)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2012

题目大意:给你段连续数字,判断每个数字带入函数 n^2+n+41 是否都为素数,是输入OK,否则输出Sorry

解题思路:

写一个判断素数的函数,然后设置一个标志 p 同时遍历这段数字,如果不是素数标志 p 改变一下病并输出 Sorry, 最后遍历结束如果标志未改变,就输出OK

判断 num 是否为素数:如果大于 2 小于等于 √num 数中没有可以整除 num 的数就是素数,否则是合数,1 既不是素数也不是合数

维基百科素数知识:https://zh.wikipedia.org/wiki/%E7%B4%A0%E6%95%B0#%E7%AE%97%E8%A1%93%E5%9F%BA%E6%9C%AC%E5%AE%9A%E7%90%86

数论基础:任何大于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 }

 

posted @ 2018-07-26 16:05  GerJCS  阅读(138)  评论(0编辑  收藏  举报