输入格式:
输入在一行中给出正整数n(n<20)。
输出格式:
输入样例:
6
输出样例:
3
7
31
# include <stdio.h>
# include <math.h>
int main()
{
int n; //n为小于20的正整数
scanf_s("%d", &n);
//n为1是没有梅森数,n>=2是至少有一个2^2-1=3是梅森数
if(n==1)
printf("None");
else
{
int flag; //flag为0表示不是素数,为1表示是素数
for (int i = 1; i <= n; i++)
{
int m = 1; //m用于存储2^i
//计算2^i
for (int j = 0; j < i; j++)
{
m *= 2;
}
/*判断2^ i - 1是否为素数,当i为1和2,计算出m - 1分别为1和3,不会进入下面的素数判断程序,
在纸上计算判断出i为1时,m-1得到1不是素数,i为2时m-1得到3是素数,
所以需要前面单独令i为1时flag初始为0,i为其他数字是默认flag初始为1。*/
if (i == 1)
flag = 0;
else
flag = 1;
//判断m-1是否为素数
for (int k = 2; k <= sqrt(m - 1); k++)
{
//不是素数则令flag为0并跳出内循环
if ((m - 1) % k == 0)
{
flag = 0;
break;
}
}
//如果2^i-1是素数则打印出来
if (flag)
printf("%d\n", m - 1);
}
}
return 0;
}