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会带来开头几个素数的判断错误问题,要引起警觉。