质数-C++代码-打印给定数字内的质数

  要判断自然数 x 是否质数,就不断尝试除于小于 x 且大于1的自然数,只要有一个能整除,则 x 是合数;否则,x 是质数。
只要从 2 一直尝试到√x,就可以了。因数都是成对出现的。比如,100的因数有:1和100,2和50,4和25,5和20,10和10。成对的因数,其中一个必然小于等于100的开平方,另一个大于等于100的开平方。而且只要尝试小于√x 的质数即可。

#include <iostream>
#include <vector>
using namespace std;
class Prime
{
private:
    vector<int> prime{ 2 };//质数集合
public:
    bool isPrime(int number)
    {
        int divisor = sqrt(number);
        for (int i = 0; prime[i] <= divisor; ++i)
            if (number%prime[i] == 0)   //是否是质数
                return false;
        return true;
    }
    void insertPrime(int n)
    {
        int max = prime.back(); //当前集合内最大质数
        if (n <= max)return;
        for (int i = max + 1; i <= n; ++i)
            if (isPrime(i))prime.push_back(i);
    }
    void printPrime(int n)
    {
        n = abs(n);     //取绝对值
        if (n == 0 || n == 1) {
            cout << "不存在质数。\n"; return;
        }
        insertPrime(n);
        for (auto& p = prime.cbegin(); p != prime.cend() && *p <= n; ++p)
            cout << *p << " ";
        cout << endl;
    }
};

int main()
{
    Prime a;
    a.printPrime(1);
    a.printPrime(2);
    a.printPrime(100);
    a.printPrime(10);
    a.printPrime(-1110);
    a.printPrime(3);
    system("pause");
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值