//有变量n,n',f(n),f(n')共四个 //step1:将十进制数n转换为二进制数a //step2:求二进制数a中1的个数x,f(n')=f(n)=x; //step3:最早出现的n'就是2的0次方一直加到2的X次方(2的a次方-1; #include<stdio.h> int main() { long long int t = 0; long long int n = 0; long long int i = 0; scanf("%lld",&t); while(t--)//通过while循环来打印t行数据 { long long int a = 0; long long int b = 0; scanf("%lld",&n);//输入每行数据 while(n)//每行数据进行操作 { n=n&(n-1);//判断一个数据的二进制有多少个1 a++;//每一个1就加加,a的结果等于f(n) } for(i=0;i<a;i++) { b=b*2+1; } printf("%lld %lld\n",a,b); } return 0; }