数学问题


输入一个长整型 数字 输出所有 小于等于这个数字的梅森素数

梅森数,是指形如2p-1的一类数,其中指数p是大于等于2的正整数,常记为M(p) 。如果梅森数是素数,就称为梅森素数。

#include 
using namespace std;

bool isPrime(int a){
    if(a<=1)
        return false;
    int sqr=(int)sqrt(1.0*a);
    for(int i=2;i<=sqr;i++){
        if(a%i==0)
            return false;
    }
    return true;
}

int main(){
    int n;
    cin>>n;
    for(int i=0;i<=n;i++){
        if(isPrime(i)){
            int m=(int)pow(2.0,1.0*i)-1;
            if(m>n)
                break;
            if(isPrime(m))
                cout<<"M("<")="<endl;
        }
    }
    return 0;
}

输入一个占32 3232比特位的十进制正整数,按下述规则输出加密后的十进制整数:

设这个整数的二进制表示为xxxx pppp xxxx eeee xxxx eeee xxxx eeee,将其中标记为e的均左移8位,标记为p的右移24位,标记为x的位置不变,输出加密后的数的十进制表示
Sample Input:
1234
Sample Output:
262864

#include 
using namespace std;

int a[8]={0};

int main(){
    int n;
    cin>>n;
    for(int i=7;i>=0;i--){
        a[i]=n&15;
        n>>=4;//第一次写的n>>4 我说怎么一直不对
    }
    int res=0;
    for(int i=0;i<8;i++){
        if(i%2==0){
            res=res|a[i];
        }
        else
            res=res|a[(i+2)%8];
        if(i!=7)
            res<<=4;
    }
    cout<endl;
    //cout<<(-1)%8<
    return 0;
}

输入两个整数a aa和n nn,要求从a aa中删除n nn个位置上的数后剩下的数按原来的相对顺序组成的新数最小,求这个数
Sample Input:
62354 2
Sample Output:
234

//为什么不多给几个测试用例!
#include 
using namespace std;

int fig[1000]={0};
int res[1000]={0};

int findmin(int a[],int low,int high){
    int minidx=low;
    int i;
    for(i=low;i>=high;i--){
        if(a[i]<a[minidx]){
            minidx=i;
        }
    }
    return minidx;
}

int main(){
    int a,n;
    cin>>a>>n;
    int len=0;
    while(a>0){
        fig[len++]=a%10;
        a/=10;
    }
    int cnt=len-n;
    int k=0;//控制挑选数字的次数
    int low=len-1;
    int high;
    while(k<cnt){
        high=cnt-k-1;
        int idx=findmin(fig,low,high);
        res[k++]=fig[idx];
        low=idx-1;
    }
    for(int i=0;i){
        cout<<res[i];
    }
    return 0;
}