CodeForces - 225E Unsolvable(梅森素数)
题目大意
问不满足条件
z
=
[
x
2
]
+
y
+
x
y
z=[\frac{x}{2}]+y+xy
z=[2x]+y+xy
的数字z从小到大第n个是什么
解题思路
对x分开奇偶考虑
当x为偶数时,不妨令x=2k
z
=
k
+
y
+
2
k
y
2
z
+
1
=
2
k
+
2
y
+
4
k
y
+
1
2
z
+
1
=
(
2
k
+
1
)
(
2
y
+
1
)
2
k
+
1
=
2
z
+
1
2
y
+
1
z=k+y+2ky\\ 2z+1=2k+2y+4ky+1\\ 2z+1=(2k+1)(2y+1)\\ 2k+1=\frac{2z+1}{2y+1}
z=k+y+2ky2z+1=2k+2y+4ky+12z+1=(2k+1)(2y+1)2k+1=2y+12z+1
为满足无正整数解的条件2z+1为奇素数
当x为奇数时,不妨令x=2k+1
z
=
k
+
y
+
(
2
k
+
1
)
y
z
=
k
+
2
y
+
2
k
y
z
+
1
=
(
2
y
+
1
)
(
k
+
1
)
2
k
+
2
=
2
z
+
2
2
y
+
1
z=k+y+(2k+1)y\\ z=k+2y+2ky\\ z+1=(2y+1)(k+1)\\ 2k+2=\frac{2z+2}{2y+1}
z=k+y+(2k+1)yz=k+2y+2kyz+1=(2y+1)(k+1)2k+2=2y+12z+2
为满足无正整数解的条件,2z+2不能有除了2以外的因数,因此
2
z
+
2
=
2
q
2z+2=2^q
2z+2=2q
由此凡是满足条件的z均需要满足2z+1为梅森素数
由此简单进行梅森素数的推导即可
AC代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
int mp[41] = {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};
typedef long long LL;
const int mod=1e9+7;
LL quick_pow(int a,int b)
{
LL ans=1;a=a%mod;
while(b)
{
if(b&1) ans=ans*a%mod;
a=a*a%mod;
b>>=1;
}
return ans;
}
int32_t main()
{
int n;
scanf("%lld",&n);
cout<<quick_pow(2,mp[n]-1)-1<<endl;
}