Tsukinai的第十七个程序(梅森尼数)

Tsukinai的第十七个程序


梅森尼数
形如2^i-1的素数,称为梅森尼数。编程计算并输出指数i在[2,n]中的所有梅森尼数,并统计这些梅森尼数的个数,其中n的值由键盘输入,
并且n的值不能大于50。其中,2 i表示2的i次方,请尽量不要使用pow(2,i)编程计算(若要用,请一直使用double计算),应采用循环累乘求积的方式计算2 i
请用下面的函数原型,编写程序。
int IsPrime(double x);
提示:当i超过30以后,2^i-1的值会很大,不能用long型变量来存储,必须使用double类型来存储。
对于double类型变量x(不是整型)不能执行求余运算,即不能用x%i == 0来判断x是否能被i整除,可以使用x/i == (long long)(x/i)来判断x是否能被i整除。

程序运行示例
Input n:
50↙
2^2-1=3
2^3-1=7
2^5-1=31
2^7-1=127
2^13-1=8191
2^17-1=131071
2^19-1=524287
2^31-1=2147483647
count=8

输入提示信息:“Input n:\n”
输入格式: “%d”
输出格式: “2^%d-1=%.0f\n”
“count=%d\n”

#include<stdio.h>
#include<math.h>
int Isprime(double x);
double power(int n);
int main()
{
    int n,i,num=0;
    printf("Input n:\n");
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        if(Isprime(power(i)-1))
        {
            num++;
            printf("2^%d-1=%.0f\n",i,power(i)-1);
        }
    }
    printf("count=%d\n",num);
}
double power(int n)
{
    if(n==1)return 2;
    else return 2*power(n-1);
}
int Isprime(double x)
{
    int i;
    if(1==x)return 0;
    for(i=2;i<+sqrt(x);i++)
    {
        if((int)x%i==0)return 0;
    }
    return 1;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值