洛谷B3840 ——[GESP202306 二级] 找素数

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;
}

给个赞吧! 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值