梅森尼数(C语言)

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

#include <stdio.h>
#include <math.h>
double PanDuan(double n);
int main()
{
	double mul=1;
	int n, count=0, r=2, i;
	printf("Input n:\n");
	scanf("%d", &n);
	for(i=1;i<=n;i++)
	{
		mul=mul * r;
		if(Y(mul-1))
		{
			count++;
			printf("2^%d-1=%.0lf\n", i, mul-1);
		}
	}
	printf("count=%d\n", count);
	return 0;
}
/*此方法判断是否可以整除,不用(int m%i==0)的这种是整型,可以进行求余,
而此时设的i是double型,因为后面的数较大,所以用此方法判断是否整除*/
double PanDuan(double n)
{
	double i;
	if(n<=1)
		return 0;
	for(i=2;i<=sqrt(n);i++)
	{
		if(n/i==(int)(n/i))
			return 0;
	}
	return 1;
}


 

猜你喜欢

转载自blog.csdn.net/qq_44075791/article/details/85717362