• F


    Problem description

    The following problem is well-known: given integers n and m, calculate 2n mod m,

    where 2n = 2·2·...·2 (n factors), and x mod y denotes the remainder of division of x by y.

    You are asked to solve the "reverse" problem. Given integers n and m, calculate m mod 2n.

    Input

    The first line contains a single integer n (1 ≤ n ≤ 108).

    The second line contains a single integer m (1 ≤ m ≤ 108).

    Output

    Output a single integer — the value of m mod 2n.

    Examples

    Input

    4
    42

    Output

    10

    Input

    1
    58

    Output

    0

    Input

    98765432
    23456789

    Output

    23456789

    Note

    In the first example, the remainder of division of 42 by 24 = 16 is equal to 10.

    In the second example, 58 is divisible by 21 = 2 without remainder, and the answer is 0.

    解题思路:由于给出的m最大值为108,于是暴力找出2k>108时的最小值k,解得k=27,所以只要n>26,直接输出m(取模一个比自己大的数字,结果为本身),反之直接取模运算,这样就不会发生数据溢出。(位运算是个好东西,长记性了)

    AC代码:

    1 #include <bits/stdc++.h>
    2 using namespace std;
    3 int main()
    4 {
    5     int n,m;
    6     cin>>n>>m;
    7     cout<<(n>26?m:m%(1<<n))<<endl;
    8     return 0;
    9 }
  • 相关阅读:
    log4j(二)——如何控制日志信息的输出?
    Java生成指定范围内的工具类
    JavaBean和Map转换封装类
    cron表达式详解
    数据库主键按照固定前缀生成工具类
    邮件发送工具类
    NFC
    牛逼辩论
    快速排序
    希尔排序
  • 原文地址:https://www.cnblogs.com/acgoto/p/9103203.html
Copyright © 2020-2023  润新知