C++程序 寻找给定区间内的质数

C++程序 寻找给定区间内的质数

什么是质数?

质数是指除了1和它本身以外,不能被其他正整数整除的数。例如,2、3、5、7、11、13等都是质数。

如何判断一个数是质数?

判断一个数是否是质数,最简单的方法就是在2到该数的平方根范围内逐一检查是否存在约数。如果不存在,那么这个数就是质数。

C++代码实现:

bool isPrime(int n){
    if(n<=1) return false;  //如果小于等于1,则不是质数
    int sqrtn=sqrt(n);  //求该数平方根
    for(int i=2;i<=sqrtn;i++){
        if(n%i==0) return false;  //如果能被2到平方根之间的任意一个数整除,则不是质数
    }
    return true;  //否则是质数
}

如何寻找给定区间内的质数?

方法一:暴力枚举

暴力枚举是最基本的方法,即对于区间内的每个数,逐一判断是否是质数。

C++代码实现:

for(int i=low;i<=high;i++){
    if(isPrime(i)){
        cout<<i<<endl;
    }
}

方法二:筛法

筛法是一种更加高效的方法,其原理是先将区间内所有的数标记为质数,然后从小到大遍历,将其倍数标记为合数,最终留下的就是质数。

C++代码实现:

void findPrimes(int low, int high){
    int prime[high+1];  //定义数组,用来标记质数和合数,0表示质数,1表示合数
    memset(prime, 0, sizeof(prime));  //将质数标记全部初始化为0
    for (int i=2;i<=high;i++){
        if (prime[i] == 0){  //如果该数为质数
            if (i >= low) cout<<i<<endl;  //如果在区间内,则输出
            for (int j=i+i;j<=high;j+=i){  //将该数的倍数标记为合数
                prime[j] = 1;
            }
        }
    }
}

结论

本文介绍了如何判断一个数是否是质数,以及如何寻找给定区间内的质数。虽然暴力枚举是最基本的方法,但对于一些较大的区间,其效率非常低。相比之下,筛法是一种更加高效的方法,可以大大缩短计算时间。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

C++ 示例