题目描述
小明刚刚学习了素数的概念:如果一个大于 1 的正整数,除了 1 和它自身外,不能被其他正整数整除,则这个正整数是素数。现在,小明想找到两个正整数 A 和 B 之间(包括 A 和 B)有多少个素数。
输入格式
输入只有一行两个正整数 A,B。约定 2≤A≤B≤1000。
输出格式
输出一行,包含一个整数 C,表示找到 C 个素数。
输入输出样例
输入 #1
2 10
输出 #1
4
输入 #2
98 100
输出 #2
0
说明/提示
【样例解释 1】
在 2 和 10 之间有 4 个素数,分别为:2、3、5、7。
思路分析
这道题的重点就在如何判断一个数是不是质数。
方法1
枚举所有可能为 x 因数的数 ∀2≤a≤x−1,
如果 xmoda=0,
那么 x 就是合数;
反之,
x 就是质数。
可以得出,
这样的时间复杂度是 O(n),
对于本题来说已经足够了,
但是还有更快的方法吗?
方法2
容易发现,x=a×b,其中 a≤x,b≥x,那么如果 xmoda=0,那么我们无需再去查询 xmodb 是否为 0。根据这个思路,我们无需枚举 2∼x−1,只需枚举 2∼x 即可。这样的时间复杂度是 O(n) 的。
但是对于可能 x<2 的情况,那么 x 就一定不是质数了。
代码实现
#include <bits/stdc++.h>
using namespace std;
int ss(int n){ // 根据方法2判断是否为质数if(n<2)return false;for(int i=2;i<=sqrt(n);i++){if(n%i==0)return false;}return true;
}int main() {int t,a;;cin>>t>>a;int n=0;for(int i=t;i<=a;i++){if(ss(i))n++;}cout<<n;return 0;
}
给个赞吧