A. Modular Exponentiation
time limit per test1 second
memory limit per test256 megabytes
inputstandard input
outputstandard output
The following problem is well-known: given integers n and m, calculate
,
where 2n = 2·2·…·2 (n factors), and denotes the remainder of division of x by y.
You are asked to solve the “reverse” problem. Given integers n and m, calculate
.
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 .
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.
如果2的n次方>m,那么m%2的n次方,一定为m。
否则正常来就ok。不用跑完,加个判断条件即可。
#include<stdio.h>
#include<stack>
#include<queue>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=1000;
const int inf=0x3f3f3f3f;
#define LL long long
int a[maxn];
int main()
{
LL n,m;
while(~scanf("%lld%lld",&n,&m))
{
LL sum=1;
int flag=1;
while(n!=0)
{
n--;
sum*=2;
//printf("%lld %lld\n",sum,m);
if(sum>m)
{
flag=0;
break;
}
}
if(!flag)
printf("%lld\n",m);
else
printf("%lld\n",m%sum);
}
return 0;
}