数学问题
输入一个长整型 数字 输出所有 小于等于这个数字的梅森素数
梅森数,是指形如2p-1的一类数,其中指数p是大于等于2的正整数,常记为M(p) 。如果梅森数是素数,就称为梅森素数。
#includeusing 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
#includeusing 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
//为什么不多给几个测试用例! #includeusing 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; }