PAT1013

来源:互联网 发布:李腾飞 java 编辑:程序博客网 时间:2024/06/03 18:15
#include<iostream>#include<vector>#include<math.h>using namespace std;int main() {    int beg,end;    cin >> beg>>end;    vector<int> vec;    //2是第1个质数,奇数不可能是2的倍数    vec.push_back(3);    int a = 5, num = 2;    while (num <= end) {        bool mark = true;        int size = vec.size();                int j = sqrt(a)+1;        for (int i = 0;i<size&&vec[i]<j;++i)            if (a%vec[i] == 0) {                mark = false;                break;            }        if (mark == true) {            ++num;            vec.push_back(a);        }        a += 2;    }    vector<int>::iterator iter1;    if (beg == 1) {        iter1 = vec.begin();        cout << "2";    }       else {        iter1 = vec.begin() + (beg - 2);        cout << *iter1;        ++iter1;    }    auto iter2 = iter1 + (end - beg);    num = 1;    while (iter1!=iter2) {        if (num == 10) {            num = 0;            cout << endl;            cout << *iter1;        }        else             cout << " " << *iter1;        ++iter1;++num;    }    return 0;}

注意第1个质数为2。
在判断1个数是否为质数时,只需要判断到不大于其开根号的部分。(后面的部分是重复的)关于sqrt函数(定义在math.h)的实现可以参考这篇博客:这里写链接内容
速度远快于判断每个vec元素的平方后比大小

原创粉丝点击