链接:https://ac.nowcoder.com/acm/contest/23479/K
来源:牛客
小红拿到了一个正整数 xx 。她想构造一个正整数 yy,满足以下性质:
- yy 是 xx 的倍数,且 xx 和 yy 不能相等。
- xx 在二进制表示下(为一个01串)是 yy 的二进制表示的一个子串。且 xx 和 yy 的二进制表示的1的个数不能相同。
- yy 必须为不超过 10^{19}10
19
的正整数。
举个例子:
若 x=5x=5 :
那么构造的 yy 不能是5,因为这样 yy 和 xx 相等,所以非法。
也不能是 6,因为这样 yy 不是 xx 的倍数,所以非法。
也不能是 10 ,因为这样 yy 的二进制表示是 1010、xx 的二进制表示是101,虽然 yy 是 xx 的倍数且 xx 的二进制是 yy 的一个子串,但它们的 '1' 的个数相同,所以非法。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main()
{
ll x;
cin>>x;
ll t=x;
ll b=1;
while(x)
{
x>>=1;
b*=2;
}
cout<<t+t*b;
return 0;
}