题目描述
2010 年“信息与未来”小学生夏令营将在常州市局前街小学进行,该校的何老师得知本校营员小明同学被营委会选为夏令营的小旗手,就准备到他家去通知他。由于他不是本班的学生,所以何老师不知道小明家住在什么地方。只从其他同学那里得知,小明住在未来小区一幢不超过100层的高楼中,但在哪一层不清楚。但其他同学提供了三条有用的信息:
-
小明家的楼层号是一个素数;
-
该楼层号化为二进制数后,其中1的个数是偶数;
-
满足以上二个条件中,楼层号最大的一个。
请编写程序,输出满足条件1、2的楼层个数总数及小明家的楼层号。
输入格式
(本题无输入)
输出格式
两个整数,即楼层个数总数和小明家的楼层号。两个整数之间用空格隔开。
代码
#include <bits/stdc++.h>
using namespace std;
int r=0;bool n[101];
bool h(int a){
for(int i=2;i*i<=a;i++){
if(a%i==0){
return 0;
}
}
return 1;
}
void er(int b){
if(b==0){
// cout<<endl;
return ;
}
er(b/2);
if(b%2==1){
r++;
}
}
bool u(int c){
r=0;
er(c);
if(r%2==0) return 1;
return 0;
}
int main(){
fill(n+1,n+1+100,1);
for(int i=1;i<=100;i++){
if(n[i]==1 && !h(i)){
n[i]=0;
}
}
for(int i=1;i<=100;i++){
if( n[i]==1 && !u(i)) n[i]=0;
}int cnt=0;
for(int i=1;i<=100;i++){
if(n[i]) cnt++;
}
cout<<cnt<<" ";
for(int i=100;i>=1;i--){
if(n[i]){
cout<<i;
return 0;
}
}
return 0;
}