素数统计

题目描述
所谓梅森数,是指形如 的一类数,其中指数p是素数,常记为Mp。如果一个梅森数是一个素数,就称为梅森素数,例如3、7、31、127等。
编写一个程序,统计m和n之间梅森素数的个数()。
输入
单组输入,输入两个正整数m和n()。
输出
输出m和n之间梅森素数的个数。
样例输入
3 3
样例输出
1

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#define ll long long
using namespace std;
bool judge(ll a)
{
    ll i;//本人经常在定义这块出错,还总是找不到原因,应当吸取教训
    if(a==1)return false;
    if(a<=3||a==5)return true;
    if(a%2==0||a%3==0)return false;
    for(i=5;i<=sqrt(a);i+=6)
        if(a%i==0||a%(i+2)==0)return false;
    return true;
}
int main()
{
    int p;
    ll m,n,s=0,temp;
    cin>>m>>n;
    for(p=1;pow(2,p)-1<=n;p++)
    {
        temp=pow(2,p)-1;
        if(temp<m)continue;
        if(temp>n)break;
        if(judge(temp)&&judge(p))
            s++;
    }
    cout<<s<<endl;
}
上一篇:2021.5.15 1rating 补题报告


下一篇:(c语言)输出1到100之间的所有素数