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