Consider the following equation:
z=[x/2]+y+x*y,
where sign [a] represents the integer part of number a.
Let’s find all integer z (z > 0), for which this equation is unsolvable in positive integers. The phrase “unsolvable in positive integers” means that there are no such positive integers x and y (x, y > 0), for which the given above equation holds.
Let’s write out all such z in the increasing order: z1, z2, z3, and so on (zi < zi + 1). Your task is: given the number n, find the number zn.
Input
The first line contains a single integer n (1 ≤ n ≤ 40).
Output
Print a single integer — the number zn modulo 1000000007 (109 + 7). It is guaranteed that the answer exists.
Examples
inputCopy
1
outputCopy
1
inputCopy
2
outputCopy
3
inputCopy
3
outputCopy
15
题目分析:
借鉴;https://blog.csdn.net/qq_24451605/article/details/48290443
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long LL;
const LL mod = 1e9+7;
int a[46] = {0,2,3,5,7,13,17,19,31,61,89,107,127,521,607,1279,2203,2281,3217,4253,4423,9689,9941,11213,
19937,21701,23209,44497,86243,110503,132049,216091,756839,859433,1257787,1398269,
2976221,3021377,6972593,13466917,20996011};
int n;
LL pp ( LL num , LL x )
{
LL ret = 1;
while ( x )
{
if ( x&1 )
{
ret *= num;
ret %= mod;
}
num *= num;
num %= mod;
x >>= 1;
}
return ret;
}
int main ( )
{
while ( ~scanf ( "%d" , &n ) )
{
printf ( "%I64d\n" , pp ( 2 , a[n]-1 ) -1 );
}
}