Recently Luba learned about a special kind of numbers that she calls beautiful numbers. The number is called beautiful iff its binary representation consists of k + 1 consecutive ones, and then k consecutive zeroes.
Some examples of beautiful numbers:
- 12 (110);
- 1102 (610);
- 11110002 (12010);
- 1111100002 (49610).
More formally, the number is beautiful iff there exists some positive integer k such that the number is equal to (2k - 1) * (2k - 1).
Luba has got an integer number n, and she wants to find its greatest beautiful divisor. Help her to find it!
The only line of input contains one number n (1 ≤ n ≤ 105) — the number Luba has got.
Output one number — the greatest beautiful divisor of Luba's number. It is obvious that the answer always exists.
3
1
992
496
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
scanf("%d", &n);
int ans = 1, cur = 1;
while(ans <= n){
cur++;
int x = 0;
for(int i = cur - 1; i <= cur + cur - 2; ++i){
x += (1 << i);
}
ans = x;
}
for(int i = cur; i >= 1; --i){
int x = 0;
for(int j = i - 1; j <= i + i - 2; ++j){
x += (1 << j);
}
if(n >= x && n % x == 0){
printf("%d\n", x);
return 0;
}
}
}
/*
题意:
定义美丽的数字是其二进制前面k个1后面k-1个0。给一个数字n,问最大美丽因子是多少。
思路:
从大到小枚举美丽数字,看能不能被整除即可。
*/