感谢 JR 赞助
S O L U T I O N \mathbb{SOLUTION} SOLUTION
设 F ( x ) = y F(x) = y F(x)=y, 沿着 F [ F ( x ) ] = − x F[F(x)] =-x F[F(x)]=−x 这个规则推
F ( x ) = y X F(x)=y \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \mathcal{X} F(x)=y X
↓ \ \ \ \ \ \ \ \ \ ↓ ↓
F ( y ) = F [ F ( x ) ] = − x F(y) = F[F(x)] = -x F(y)=F[F(x)]=−x
↓ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ↓ ↓
F ( − x ) = F [ F ( y ) ] = − y F(-x)=F[F(y)] = -y F(−x)=F[F(y)]=−y
↓ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ↓ ↓
F ( − y ) = F [ F ( − x ) ] = x F(-y) = F[F(-x)] = x F(−y)=F[F(−x)]=x
↓ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ↓ ↓
F ( x ) = F [ F ( − y ) ] = y Y F(x)=F[F(-y)]=y \ \ \ \ \ \ \ \ \mathcal{Y} F(x)=F[F(−y)]=y Y
会发现
X
\mathcal{X}
X式 又等价于
Y
\mathcal{Y}
Y式,
得出结论: 对两个正整数
x
,
y
x,y
x,y,
F
(
x
)
=
±
y
F(x)=±\ y
F(x)=± y, 只会影响到
F
(
x
)
,
F
(
y
)
,
F
(
−
x
)
,
F
(
−
y
)
F(x), F(y), F(-x), F(-y)
F(x),F(y),F(−x),F(−y)四个函数的值.
不考虑负数的存在, 原问题转换为
求
1
,
2
,
3
,
.
.
,
R
1, 2, 3, .., R
1,2,3,..,R 序列中两两配对的方案数,
F
(
x
)
=
±
y
F(x) = ± \ y
F(x)=± y 是两种不同的方案, 即一次配对有两种不同的选择,
∴
A
n
s
=
2
R
/
2
∗
(
N
−
1
)
∗
(
N
−
3
)
.
.
.
∗
1
∴ Ans = 2^{R/2}*(N-1)*(N-3)...*1
∴Ans=2R/2∗(N−1)∗(N−3)...∗1
C O D E \mathbb{CODE} CODE
#include<bits/stdc++.h>
#define reg register
const int maxn = 10000007;
int L;
int R;
int Ans;
const int mod = 666623333;
int KSM(int a, int b){
int s = 1;
while(b){
if(b & 1) s = 1ll*s*a % mod;
a = 1ll*a*a % mod;
b >>= 1;
}
return s;
}
int main(){
scanf("%d%d", &L, &R);
if(L != -R) printf("0\n");
else if((L&1) || (R&1)) printf("0\n");
else{
Ans = KSM(2, R/2);
for(reg int i = 3; i <= R; i += 2){
Ans = 1ll*Ans*i % mod;
}
printf("%d\n", Ans);
}
return 0;
}