Z5.5 Mersenne Number问题

【问题描述】梅森数:形如

素数称为梅森数。例如

都是梅森数。1722年,双目失明的瑞士数学大师欧拉(Euler)证明了

是一个素数,堪称当时世界上“已知最大素数”的一个记录。输入一个正整数n(n<20),编程输出所有不超过

的所有梅森数。如果输入的数据不合法,则输出Error.。没有梅森数,则输出no Mersenne Number.,(参考样例输入)

(提示:定义两个标志变量,一个用于标记是否为素数,一个用于标记是否为梅森数)

【样例输入1】6
【样例输出1】

3 is a Mersenne Number.

7 is a Mersenne Number.

31 is a Mersenne Number.

【样例输入2】1
【样例输出2】

no Mersenne Number.

【样例输入3】0
【样例输出3】

Error.

【样例说明】无

【评分标准】 正确得满分。

#include <stdio.h>
#include <math.h>
#include <stdbool.h>

// 函数声明,用于检查一个数是否为素数
bool isPrime(long long number);

int main() {
    int n;
    int i;

    // 获取输入

    scanf("%d", &n);

    // 检查输入是否合法
    if (n <= 0 || n >= 20) {
        printf("Error.\n");
        return 0;
    }

    // 输出梅森数


    // 处理 n = 1 的特殊情况
    if (n == 1) {
        printf("no Mersenne Number.\n");
    } else {
        for ( i = 0; i < n; ++i) {
            long long mersenne = (1LL << i) - 1;  // 使用长整型避免溢出

            // 检查是否为素数,并输出结果
            if (isPrime(mersenne)) {
                printf("%lld is a Mersenne Number.\n", mersenne);
            }
        }
    }

    return 0;
}

// 检查一个数是否为素数的函数
bool isPrime(long long number) {
	long long i;
    if (number < 2) {
        return false;  // 小于2的数不是素数
    }

    for (i = 2; i <= sqrt(number); ++i) {
        if (number % i == 0) {
            return false;  // 能被整除,不是素数
        }
    }

    return true;  // 没有找到可以整除的因子,是素数
}




  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值