统计素数

Description

输入区间[L,R],寻找在此区间内的质数。

Input

区间[L,R]中的整数L,R(0<=L,R<=30000)

Output

此区间中所有质数的个数n

Sample Input

0 100

Sample Output

25

python解法

import math  # 导入数学库,用于计算平方根

n = 0 # 初始化变量n为0,用于计数质数的个数

# 从标准输入读取两个整数l和r,并用map函数将它们转换为整数类型
l, r = map(int, input().split())

# 使用for循环遍历从l到r(包含r)的所有整数
for i in range(l, r+1):  # 从l遍历到r(包含r)
    # 如果当前的数i小于等于1,则它不是质数,跳过此次循环
    if i <= 1:
        continue
    
    # 初始化is_prime为True,表示假设当前的数i是质数
    is_prime = True  # 定义一个布尔变量,标记当前的数i是否为质数
    
    # 使用for循环从2遍历到i的平方根(取整后加1),用于检查i是否有除了1和它本身以外的其他因数
    for j in range(2, int(math.sqrt(i)) + 1):  # 内层循环,从2开始到i的平方根结束
        # 如果i能被j整除,则i不是质数
        if i % j == 0:  # 如果i能被j整除
            is_prime = False  # 设置is_prime为False,表示i不是质数
            break  # 跳出内层循环,因为已经找到了一个除数,不需要继续检查
    
    # 如果内层循环结束后is_prime仍为True,说明i没有除了1和它本身以外的其他因数,因此i是质数
    if is_prime:  # 如果is_prime仍为True,那么i是质数
        n += 1  # 将质数的计数n加1

# 输出在给定区间`[l, r]`内的质数个数
print(n)

c++解法

#include<bits/stdc++.h> // 引入一个常用的头文件集合,包含了C++标准库的大部分头文件
using namespace std; // 使用C++标准命名空间,避免每次调用标准库函数或对象时都需要前缀std::

int main() { // 主函数入口
    int i, j, l, r, n = 0; // 定义循环变量i, j,范围变量l, r,以及计数器n(用于记录质数的数量)
    cin >> l >> r; // 从标准输入读取两个整数l和r,作为查找质数的范围

    for (i = l; i <= r; i++) { // 遍历范围[l, r]内的每一个整数i
        if (i <= 1) { // 如果i小于等于1,则i不是质数
            continue; // 跳过当前循环,继续下一次循环
        }
        int flag = 1; // 定义一个标志位flag,初始化为1,用于标记i是否为质数(1表示可能是,0表示不是)

        for (j = 2; j <= sqrt(i); j++) { // 内层循环,从2开始到i的平方根结束,检查i是否有因子
            if (i % j == 0) { // 如果i能被j整除,则i不是质数
                flag = 0; // 将flag设置为0
                break; // 跳出内层循环,不再继续检查其他的j值
            }
        }
        if (flag) { // 如果flag仍为1,则i是质数
            n++; // 质数计数器加1
        }
    }
    cout << n << endl; // 输出在范围[l, r]内的质数数量
    return 0; // 主函数返回0,表示程序正常结束
}
如果您有更优的解法,欢迎在评论区一起交流噢~
阅读剩余
THE END