区间内的真素数

该文章介绍了如何使用C++编写程序,通过isPrime和rev函数判断给定区间M到N(1<M<N<100000)内所有同时满足自身和其反序为素数的正整数,即真素数,并给出了相应的输入输出样例。
摘要由CSDN通过智能技术生成

【题目描述】

找出正整数M和N之间(N不小于M)的所有真素数。

真素数的定义:如果一个正整数P为素数,且其反序也为素数,那么P就为真素数。

例如,11,13均为真素数,因为11的反序还是为11,13的反序为31也为素数。

【输入】

输入两个数M和N,空格间隔,1<=M<=N<=100000。

【输出】

按从小到大输出M和N之间(包括M和N)的真素数,逗号间隔。如果之间没有真素数,则输出No。

【输入样例】

10 35

【输出样例】

11,13,17,31
#include <iostream>
#include <cmath>
using namespace std;
bool isPrime(int n)//判断是否是质数
{
    if(n < 2)
        return false;
    for(int i = 2; i <= sqrt(n); ++i)
        if(n % i == 0)
            return false;
    return true;
}
int rev(int n)//数字反序
{
    int num = 0;
    for(int a = n; a > 0; a /= 10)//数字拆分 前提n >= 1
        num = num * 10 + a % 10;
    return num;
}
int main()
{
    int m, n;
    cin >> m >> n;
    bool hasShow = false;//是否已经有输出 
    for(int i = m; i <= n; ++i)
    {
        if(isPrime(i) && isPrime(rev(i)))//如果i和i的逆序的数字都是质数
        {
            if(hasShow == true)//如果已经输出过 
                cout << ',';
            else
                hasShow = true;
            cout << i;
        }
    }
    if(hasShow == false)//如果没有输出过 
        cout << "No";
    return 0;
}

在C语言中,区间内的素数是指在给定范围内的质数。要找出这个范围内的素数,可以使用经典的算法,如埃拉托斯特尼筛法(Sieve of Eratosthenes)。以下是简单的步骤: 1. 定义一个函数,接收两个整数作为输入,表示需要检查的范围的起点和终点。 2. 创建一个足够大的布尔数组,用于记录每个数字是否为质数,初始值设为`true`,因为所有大于1的数都可能是质数。 3. 从2开始,将数组中所有的2的倍数标记为非质数(除了2本身)。 4. 遍历数组,对于每一个找到的质数(当前未被标记的数),将它的平方作为起点,跳过它自身,然后将这个平方的所有倍数标记为非质数。 5. 检查数组中的数,如果它们仍然标记为`true`,则它们就是该范围内的素数。 下面是一个简化的示例代码片段: ```c #include <stdio.h> #include <stdbool.h> #define MAX_RANGE 10000 bool is_prime(int num) { if (num <= 1) return false; for (int i = 2; i * i <= num; i++) { if (num % i == 0) return false; } return true; } void find_primes_in_range(int start, int end) { bool prime[MAX_RANGE + 1]; for (int i = 0; i <= MAX_RANGE; i++) prime[i] = true; for (int p = 2; p * p <= end; p++) { if (prime[p]) { for (int i = p * p; i <= end; i += p) prime[i] = false; } } printf("Prime numbers between %d and %d are:\n", start, end); for (int i = start; i <= end; i++) { if (prime[i]) printf("%d ", i); } } int main() { int range_start, range_end; printf("Enter the range (start-end): "); scanf("%d%d", &range_start, &range_end); if (range_start > range_end) { printf("Invalid range. Start must be less than or equal to End.\n"); return 1; } find_primes_in_range(range_start, range_end); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值