【题目描述】
输出正整数a到b之间的所有素数。
【输入】
输入a,b。
【输出】
由小到大,输出a到b之间的所有素数。每个数占一行。
【输入样例】
5 10
【输出样例】
5
7
【提示】
对于所有数据,1≤a≤b≤20000。

#include<iostream>
#include<cmath>
using namespace std;
bool func(int a) {
    for (int i = 2; i <= sqrt(a) + 1; i++) {
        if (a % i == 0) {
            return false;
        }
    }
    return true;
}
int main()
{
    int a = 0, b = 0;
    cin >> a >> b;
    for (int i = a; i <= b; i++) {
        if (func(i)) {
            cout << i << endl;
        }
    }
    return 0;
}

素数就是只能被1和自身整除。我们只需要从1到这个数本身遍历,如果有除了1和自身之外的数可以整除,那这个数就不是素数,但是我们可以进行优化,例如8可以拆成:
1x8=8
2x4=8
4x2=8
8x1=8
很明显,1x8和8x1是一样的,而前面的数最大的情况就是这个数开平方,例如9可以拆成3x3。所以我们把循环的终止条件改成小于等于这个数开平方,就可以大大减少循环次数。