#6618. 管理哪个区间(2)

管理哪个区间(2)

题目 2:编号的管辖范围

题目描述

某信息管理系统需要维护一组按顺序编号的数据,编号从 1 开始。

对于任意正整数 i,定义函数 (F(i)) 满足:

  • (F(i)) 是 2 的整数次幂;
  • (F(i)) 能够整除 i
  • 在满足上述条件的所有整数中,(F(i)) 的值最大。

系统规定,编号 i 对应一个连续的管辖区间。该区间的右端点为 i,区间长度为 (F(i))。

设管辖区间为: [L,R]

则有:

R=iR=i

并且区间中一共包含 (F(i)) 个整数。

给定正整数 i,请计算其对应管辖区间的左端点 L 和右端点 R


输入格式

输入一个正整数:

i

输出格式

输出两个整数:

L R

表示编号 i 对应的管辖区间为:

[L,R]


数据范围

对于所有测试数据:

1 ≤ i ≤ 10^9

样例输入 1

20

样例输出 1

17 20

样例解释

对于:

i = 20

能够整除 202 的整数次幂有:

1,2,4

其中最大的数是:

4

因此:

F(20)=4F(20)=4

编号 20 对应区间的右端点为 20,区间长度为 4

20 开始向前一共取 4 个编号:

17,18,19,20

所以管辖区间为:

[17,20]

因此输出:

17 20

样例输入 2

16

样例输出 2

1 16

样例解释

因为:

16=2416=2^4

所以:

F(16)=16F(16)=16

区间右端点为 16,区间长度为 16,因此区间为:

[1,16]


思考提示

已知区间右端点为:

R=iR=i

区间长度为:

F(i)F(i)

一个包含 (F(i)) 个整数,并且右端点为 i 的连续区间,其左端点应该如何计算?

注意:

[17,20]

中包含的是:

17,18,19,20

一共有 4 个整数,而不是 3 个。