解题思路:

        规律:只有当x为奇数或4的倍数时才能拆分为两个数的平方差。

注意事项:

        刚开始用c++写循环的时候,有一个样例会超时,故进一步寻找规律:F(X)=x/4+(x+1)/2,该式代表不大于x的满足条件的数的个数,用F(R)-F(L-1)即为L-R之间(大于等于L,小于等于R)满足条件的数的个数。


参考代码:

#include<iostream>
using namespace std;
int F(int x) {
	return x / 4 + (x + 1) / 2;//不大于x的满足条件的数的个数
}
int main() {
	int l = 0, r = 0;
	cin >> l >> r;
	cout << F(r)-F(l-1);
	return 0;
}


点赞(0)
 

0.0分

58 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 20 条评论

ChrisBertina 9月前 回复TA
根本想不到
Harbour 9月前 回复TA
@黑魔导 @dotcpp0750343 (y-z)(y+z)如果是两个偶数的时候,除0以外的偶数都是2的倍数,两个相乘就是四的倍数了
dotcpp0750343 10月前 回复TA
@黑魔导 怎么来的求教
黑魔导 11月前 回复TA
@黑魔导 我知道4怎么来了
黑魔导 11月前 回复TA
x=(y-z)(y+z)
1,3,4,5
是基础,然后两个括号乘以一个数往外拓展
因为奇数本身就满足
奇数乘以奇数还是奇数还满足
所以不用乘以奇数,只需乘以偶数,而偶数只需乘以2就能拓展到,两个阔号都乘以2,那就是乘以4
黑魔导 11月前 回复TA
我只能发现x为奇数时是满足的,但是x为4的倍数是怎么来的???
sjr 11月前 回复TA
简直反人类规律,这特么第一次见怎么想的到啊?
hzh 11月前 回复TA
@十四行诗 平方差,l*l-r*r=(l+r)*(l-r),奇乘偶等于奇,偶成偶最小也是4,以为x^2函数越来越陡,最小的差就是2^2-0^2,再往上就是次小就是4^2-2^2,也是12,也感觉出来肯定是4的倍数了
Kira 11月前 回复TA
感觉编程的尽头还是数学www,纯代码硬缸就很容易时间或内存超限
十四行诗 11月前 回复TA
当x为奇数或4的倍数时才能拆分为两个数的平方差,这到底是怎么发现的