Codeforces1064B——Equations of Mathematical Magic
阿新 • • 發佈:2018-11-08
給定a,求方程 的非負數解的個數,方程其實就是
找規律,發現都是2的冪,隊友直接看出是a中1的個數是n,則2^n
(不會證明,不過可以看出按位減法和異或的關係,0-0 和0異或0是不同的,其他都是相同的,所以找出a中1的位數有n個,所以x就由這n個1中選出幾個來與a中的1對應異或或者相減即可,那麼組合就有2^n中情況
程式碼:
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
int main(void){
// for(int a=1;a<=100;a++){
// int sum=0;
// for(int x=0;x<=a;x++){
// if(a-(a^x)-x==0){
// sum++;
// }
// }
// printf("%d %d\n",a,sum);
// }
int t;
scanf("%d",&t);
long long a;
while(t--){
scanf("%I64d",&a);
int s=0;
while(a){
if(a&1){
s++;
}
a/=2;
}
//printf("%d\n",s);
printf("%.0lf\n",pow(2,s));
}
return 0;
}