Oier们的幸运数字

博客围绕JerryC对数字的喜好展开,定义了函数f(i),规定满足特定区间内f(i)和为奇数时她才特别高兴。给出输入输出格式、样例及数据范围,最后提出解决方案,即只有f(c2)(c为奇数)对答案有贡献,通过求特定区间长度得出结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

JerryC对数字痴迷到了一种非正常的境界。每天JerryC都有喜欢的一些数字。第 iii 天JerryC就喜欢Ai−BiA_i-B_iAiBi中的数字。但是他觉得这样并不是很有趣,于是他就定义了一个函数
f(i)=i∗∑j=1i(i mod j)f(i)=i*\sum^{i}_{j=1}(i\ mod\ j)f(i)=ij=1i(i mod j)
但是JerryC还是觉得不够有趣,于是她觉得只有满足
∑i=ABf(i)\sum^{B}_{i=A}f(i)i=ABf(i)
为奇数的一天才是她特别高兴的一天。
现在告诉你最近TTT天JerryC喜欢的数的区间,请你猜猜她每一天会不会特别高兴。
解释:
第一个式子就是表示 f(i)f(i)f(i) 等于 iii 乘以 iii 的约数个数。
第二个式子就是求出 [A,B][A, B][A,B] 区间内所有的 f(i)f(i)f(i) 的和。

输入输出格式

输入格式:
111行一个整数TTT表示有多少天。
2−(T+1)2-(T+1)2(T+1)行两个非负整数Ai, BiA_i,\ B_iAi, Bi表示每天JerryC喜欢的数的区间。

输出格式:

TTT行。每行为"YesYesYes“或”NoNoNo",表示第 iii 天是不是JerryC特别高兴的一天。

输入输出样例

输入样例:

333
1 101\ 101 10
11 1511\ 1511 15
5 125\ 125 12


#####输出样例:
NoNoNo
NoNoNo
YesYesYes

数据范围

0&lt;=T&lt;=106, 1&lt;=Ai&lt;=Bi&lt;=10180&lt;=T&lt;=10^6,\ 1&lt;=A_i&lt;=B_i&lt;=10^{18}0<=T<=106, 1<=Ai<=Bi<=1018

Solution\text{Solution}Solution

我们发现,只有f(c2), cf(c^2),\ cf(c2), c是奇数的情况才能对答案产生贡献。设c=⌈a⌉, d=bc=\lceil\sqrt a\rceil,\ d=\sqrt bc=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");
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值