1013. 数素数 (20)
2017-03-28 14:53
246 查看
1013. 数素数 (20)
令Pi表示第i个素数。现任给两个正整数M <= N <= 104,请输出PM到PN的所有素数。输入格式:
输入在一行中给出M和N,其间以空格分隔。
输出格式:
输出从PM到PN的所有素数,每10个数字占1行,其间以空格分隔,但行末不得有多余空格。
输入样例:
5 27
输出样例:
11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103
解题心得:
这道题开始困扰了我好久,先是发现题目中带有坑,后面又是格式错误,分享一下吧。
说是Pi表示第i个素数,例如2、3、5、7、11,所以题干的输入格式里面5指代的就是11,故27指的就是103了。
格式错误。要满足两个条件,一是每一行的行末不能有“ ”;其次是最后一个元素不能有“ ”。注意好细枝末节就可以了。
简述一下自己的思路:
先定义两个变量pm,再进行素数的判断。随着i的增加判断出是素数,那么pm就会自减,当pm=0时就找到了M下对应的素数begin。个人觉得比较简单,但是可能会增加时间复杂度。
尽可能进行小范围的判断,例如执行到平方根就可以了。
判断素数的方法有很多,还需要多学习几种。
#include<iostream> #include<cmath> using namespace std; int main() { int pm, pn; int begin, end; int num[10000], k = 0; cin >> pm >> pn; for (int i = 2; pm>0 ; i++) { for (int j = 2; j != sqrt(i); j++) { if (i%j==0 &&i !=2) { break; } else if (j>sqrt(i)) { begin = i; pm--; break; } } } for (int i = 2; pn > 0; i++) { for (int j = 2; j != sqrt(i); j++) { if (i%j == 0 && i != 2) { break; } else if (j>sqrt(i)) { end = i; pn--; break; } } } for (int i = begin; i <= end; i++) { for (int j = 2; j != sqrt(i); j++) { if (i%j == 0 && i != 2) { break; } else if (j>sqrt(i)) { num[k++] = i; break; } } } for (int i = 0; i <= k-1; i++) { if (i==k-1) { cout << num[i]; break; } cout << num[i]; if ((i+1)%10!=0) cout <<" "; else cout << endl; } cout << endl; return 0; }
相关文章推荐
- 1013. 数素数 (20)
- 编程题目: PAT 1013. 数素数 (20)
- PAT B 1013. 数素数 (20)
- PAT 乙级 1013. 数素数 (20)
- 1013. 数素数 (20)
- 1013. 数素数 (20)
- 1013. 数素数 (20)
- PAT 1013 数素数 (20)
- PAT(basic level) 1013 数素数(20)
- 1013. 数素数 (20)
- PAT-1013. 数素数 (20)
- 1013. 数素数 (20)-PAT乙级真题-浙大PAT乙级真题java实现
- PATBasic——1013. 数素数 (20)
- PAT 乙级 1013. 数素数 (20)
- 1013. 数素数 (20)
- 1013. 数素数 (20)
- 1013. 数素数 (20)
- 1013. 数素数 (20)
- PAT --- 1013. 数素数 (20)
- 1013. 数素数 (20)