CodeForces

来源:互联网 发布:js金融格式输出 编辑:程序博客网 时间:2024/06/07 02:09

Description

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!

Input

The only line of input contains one number n (1 ≤ n ≤ 105) — the
number Luba has got.

Output

Output one number — the greatest beautiful divisor of Luba’s number.
It is obvious that the answer always exists.

Examples

input

3

output

1

input

992

output

496

思路

题目中定义了一种数,叫做美丽的数,定义是这样的:

一个数的二进制如果有连续的k+1个1和k个0组成,那么这个数是美丽的数

比如,当:

  • k=0 :1
  • k=1 :110
  • k=2 :11100
  • k=3 :1111000

题目给出了一个数n,让你从它的因子里面找出一个最大的美丽的数

枚举美丽的数,然后与判断是否可以整除

代码

c++:

#include <bits/stdc++.h>#define mem(a,b) memset(a,b,sizeof(a))using namespace std;int dec(string s){    int len=s.length(),ans=0;    for(int i=0; i<len; i++)        ans+=(s[i]-'0')*(int)pow(2,len-1-i);    return ans;}int main(){    int n,p=1;    string i="110";    scanf("%d",&n);    while(dec(i)<=n)    {        if(n%dec(i)==0)            p=dec(i);        i="1"+i+"0";    }    printf("%d\n",p);    return 0;}

python3:

n=int(input())i = '110'p=1while int(i,2)<=n:  if n%int(i,2)==0:    p=int(i,2)  i='1'+i+'0'print(p)
原创粉丝点击