题目描述
JerryC对数字痴迷到了一种非正常的境界。每天JerryC都有喜欢的一些数字。第
i
i
i 天JerryC就喜欢
A
i
−
B
i
A_i-B_i
Ai−Bi中的数字。但是他觉得这样并不是很有趣,于是他就定义了一个函数
f
(
i
)
=
i
∗
∑
j
=
1
i
(
i
m
o
d
j
)
f(i)=i*\sum^{i}_{j=1}(i\ mod\ j)
f(i)=i∗j=1∑i(i mod j)
但是JerryC还是觉得不够有趣,于是她觉得只有满足
∑
i
=
A
B
f
(
i
)
\sum^{B}_{i=A}f(i)
i=A∑Bf(i)
为奇数的一天才是她特别高兴的一天。
现在告诉你最近
T
T
T天JerryC喜欢的数的区间,请你猜猜她每一天会不会特别高兴。
解释:
第一个式子就是表示
f
(
i
)
f(i)
f(i) 等于
i
i
i 乘以
i
i
i 的约数个数。
第二个式子就是求出
[
A
,
B
]
[A, B]
[A,B] 区间内所有的
f
(
i
)
f(i)
f(i) 的和。
输入输出格式
输入格式:
第
1
1
1行一个整数
T
T
T表示有多少天。
第
2
−
(
T
+
1
)
2-(T+1)
2−(T+1)行两个非负整数
A
i
,
B
i
A_i,\ B_i
Ai, Bi表示每天JerryC喜欢的数的区间。
输出格式:
T
T
T行。每行为"
Y
e
s
Yes
Yes“或”
N
o
No
No",表示第
i
i
i 天是不是JerryC特别高兴的一天。
输入输出样例
输入样例:
3
3
3
1
10
1\ 10
1 10
11
15
11\ 15
11 15
5
12
5\ 12
5 12
#####输出样例:
N
o
No
No
N
o
No
No
Y
e
s
Yes
Yes
数据范围
0
<
=
T
<
=
1
0
6
,
1
<
=
A
i
<
=
B
i
<
=
1
0
18
0<=T<=10^6,\ 1<=A_i<=B_i<=10^{18}
0<=T<=106, 1<=Ai<=Bi<=1018
Solution \text{Solution} Solution
我们发现,只有
f
(
c
2
)
,
c
f(c^2),\ c
f(c2), c是奇数的情况才能对答案产生贡献。设
c
=
⌈
a
⌉
,
d
=
b
c=\lceil\sqrt a\rceil,\ d=\sqrt b
c=⌈a⌉, d=b。
对于区间
[
a
,
b
]
[a,b]
[a,b],只有
[
c
,
d
]
[c,d]
[c,d]区间长度中的奇数对答案有贡献。我们求出
[
c
,
d
]
[c,d]
[c,d]区间长度便可以求出答案。
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#define reg register
typedef long long ll;
int n,ans;
ll a,b;
ll c,d;
//读入优化
inline ll read(){
ll x=0;char c;
do c=getchar(); while(c<'0'||c>'9');
while(c>='0'&&c<='9')
x=x*10+c-48,c=getchar();
return x;
}
int main(){
scanf("%d",&n);
for(reg int i=1;i<=n;++i){
a=read(),b=read();
c=ceil(sqrt(a)),d=sqrt(b);
if(a==b)//特判
{
printf(c*c==a&&(c&1)?"Yes\n":"No\n");
continue;
}
//如果c是偶数,他对答案不产生贡献
if(!(c&1)) c++;
printf(((d-c)/2+1)&1?"Yes\n":"No\n");
}
}