从M开始找N个质数

本文介绍了一个使用C语言编写的质数生成算法。该算法通过双重循环遍历从给定数值开始的所有整数,检查每个数是否为质数,并在找到指定数量的质数后停止。算法利用了数学性质,即如果一个数不是质数,则它必有一个不大于其平方根的因数,从而提高了效率。
#include<stdio.h>
#include<math.h>
void number(int n,int m)
{
    int i,j,cnt=0;//cnt计数器,初值=0
    for(i=n;i<1000;i++)
    {
        for(j=2;j<=sqrt(i);j++)
        {
            if(i%j==0)break;
        }
        if(i%j!=0)
        {
            printf("%d\n",i);
            cnt++;
        }
        if(cnt==m)//当有m个质数输出时结束
            break;
    }
}
int main()
{
    int x,y;
    scanf("%d %d",&x,&y);
    number(x,y);
    return 0;
}

 

为了编写一个程序,它接受两个整数 `m` 和 `n`,然后输出从 `m` 开始后的 `n` 个素数,我们可以使用经典的算法,比如埃拉托斯特尼筛法(Sieve of Eratosthenes)。这个算法用于到一定范围内的所有素数。首先,我会展示如何实现这个功能,然后我会提供相关的解释。 ```cpp #include <iostream> #include <vector> bool isPrime(int num) { if (num <= 1) return false; for (int i = 2; i * i <= num; ++i) { if (num % i == 0) return false; } return true; } std::vector<int> findPrimesAfter(int m, int n) { std::vector<bool> marked(m + n + 1, true); // Initialize all numbers as prime marked[0] = marked[1] = false; // Sieve of Eratosthenes for (int i = 2; i * i <= m + n; ++i) { if (marked[i]) { for (int j = i * i; j <= m + n; j += i) marked[j] = false; } } // Extract the primes after 'm' std::vector<int> primes; for (int i = m; i <= m + n && i < marked.size(); ++i) { if (marked[i]) primes.push_back(i); } return primes; } int main() { int m, n; std::cout << "Enter m and n: "; std::cin >> m >> n; std::vector<int> result = findPrimesAfter(m, n); std::cout << "The first " << n << " primes after " << m << " are:\n"; for (const auto& prime : result) std::cout << prime << " "; std::cout << "\n"; return 0; } ``` 这段代码首先定义了一个辅助函数 `isPrime()` 来检查一个数是否为素数。接着,我们用 `findPrimesAfter()` 函数实现埃拉托斯特尼筛法,标记非素数,然后出 `m` 后的 `n` 个素数并存储在一个 `std::vector` 中。最后,在 `main()` 函数中获取用户输入并打印结果。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值