小韦老师@神犇营-my0162-素数个数
题目:
描述
输入两个整数 X 和 Y,输出两者之间的素数个数(包括 X 和 Y)。
输入
两个整数 X 和 Y (1 ≤ X, Y ≤ 10^5)。
输出
输出一个整数,表示 X,Y 之间的素数个数(包括 X 和 Y)。
输入样例1
1 100
输出样例1
25
提示
如果发现超时,则需要借助一个工具。
一般我们判断 x 是否为素数时,枚举 2~x-1,看是否有某个数可以整除 x。其实可以将枚举的范围改为:2~sqrt(x),其中 sqrt 为求平方根函数。
题解:
破题:
考查素数的判断和自定义函数。
思路:
1.首先定义两个变量 m 和 n,代表 X 和 Y,并将 m 和 n 输入。
2.定义一个计数器,并初始化为 0。
3.枚举 m 到 n 的每一个整数,判断当前数是否为素数(这里用自定义函数判断),若为素数,则计数器加 1。
4.输出计数器。
5.完成判断素数的自定义函数(在主函数上面):
(1)返回值是 bool 型,参数 i 为一个整型。
(2)判断该参数 i 是否为素数:用循环枚举 2~sqrt(i),若是有可以整除 i 的数,说明 i 不是素数,立即返回 false。若循环能自然结束,循环结束后返回 true。
完整代码:
#include <bits/stdc++.h>
using namespace std;
bool prime(int i) {
if (i <= 1) { // 若一个数小于等于 1,则一定不是素数
return false;
}
int sqr = sqrt(i);
for (int j = 2; j <= sqr; j++) {
if (i % j == 0) {
return false;
}
}
return true;
}
int main() {
int m, n;
cin >> m >> n;
int cnt = 0; // 计时器
for (int i = m; i <= n; i++) {
// 若 i 为素数,则计数器加 1
if (prime(i)) cnt++;
}
cout << cnt;
return 0;
}