7-8 !!! (10 分) 豪豪哥前段时间研究数论的时候,发现了一样有趣的东西——梅森素数。梅森数是指形如2 p −1的一类数,其中p为素数。如果梅森数是素数,则称为梅森素数。最小的梅森素数是2 2 −1,也就是3。现在给出一个不大于8的正整数k,你需要求出第k小的梅森素数。(注:前8个梅森素数均在整型范围内,但仍需小心数据溢出。)
输入格式: 输入在一行中给出1个不超过8的正整数k(1<=k<=8)。
输出格式: 在一行中输出第k小的梅森素数,保证前8个梅森素数均在整型范围内。
输入样例0: 1 输出样例0: 3 输入样例1: 2 输出样例1: 7
#include<iostream>
#include<cmath>
using namespace std
;
int panduan(int n
){
int i
,k
;
for(i
=2;i
<=sqrt(n
);i
++){
if(n
%i
==0)break;
}
if(i
>=sqrt(n
)&&n
!=4&&n
!=1){k
=1;
}
else k
=-1;
return k
;
}
int main(){
int n
,count
,g(0),i
;
cin
>>n
;count
=0;
for(i
=2;count
<n
;i
++){
if(panduan(i
)==1){g
=pow(2,i
)-1;
if(panduan(g
)==1)count
++;
}
}
cout
<<g
<<endl
;
return 0;
}
判断素数,使用sqrt会带来开头几个素数的判断错误问题,要引起警觉。