见B3840 [GESP202306 二级] 找素数 - 洛谷
题目描述
小明刚刚学习了素数的概念:如果一个大于 1 的正整数,除了 1 和它自身外,不能被其他正整数整除,则这个正整数是素数。现在,小明想找到两个正整数 A 和 B 之间(包括 A 和 B)有多少个素数。
输入格式
输入只有一行两个正整数 A,B。约定 2≤A≤B≤1000。
输出格式
输出一行,包含一个整数 C,表示找到 C 个素数。
输入输出样例
in:
2 10
out:
4
in:
98 100
out:
0
这道题的重点是判断素数的函数
素数又称质数,
一个大于1的自然数,
除了1和它自身外,
不能被其他自然数整除的数叫做质数,
也就是素数;
否则称为合数。
例如,15=3*5,
所以15不是素数;
又如,12=6*2=4*3,
所以12也不是素数。
另一方面,
13除了等于13*1以,
不能表示为其它任何两个整数的乘积,
所以13是一个素数。
素数函数是一个重点
见下
int sushu(int n){
if(n<2)return false;
for(int i=2;i<=sqrt(n);i++){
if(n%i==0)return false;
}
return true;
}
容易发现,
n=a×b=b*a,
由于a*b和b*a是一样的,
所以只需判断一次就行了。
根据这个思路,
我们无需枚举 2∼x−1,
只需枚举 2∼x 即可。
这样的时间复杂度是 O(n) 的。
*******************************************************************************************************************
所以,
本题要套素数函数
然后判断A~B中有几个满足条件
然后计数的加一
最后输出计数的~_~
本体具体代码如下
#include <bits/stdc++.h>
using namespace std;
int sushu(int n){
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(sushu(i))n++;
}
cout<<n;
return 0;
}