累死自己卷死室友


私信TA

用户名:52hertz

访问量:11622

签 名:

刷题好!

等  级
排  名 1721
经  验 2686
参赛次数 2
文章发表 3
年  龄 0
在职情况 学生
学  校 吉林大学
专  业 软件工程

  自我简介:

解题思路:

        规律:只有当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分

108 人评分

  评论区

根本想不到
2024-04-08 20:21:32
x=(y-z)(y+z)
1,3,4,5
是基础,然后两个括号乘以一个数往外拓展
因为奇数本身就满足
奇数乘以奇数还是奇数还满足
所以不用乘以奇数,只需乘以偶数,而偶数只需乘以2就能拓展到,两个阔号都乘以2,那就是乘以4
2024-02-28 00:10:17
我只能发现x为奇数时是满足的,但是x为4的倍数是怎么来的???
2024-02-27 23:55:59
简直反人类规律,这特么第一次见怎么想的到啊?
2024-02-27 21:29:43
感觉编程的尽头还是数学www,纯代码硬缸就很容易时间或内存超限
2024-02-16 17:48:36
当x为奇数或4的倍数时才能拆分为两个数的平方差,这到底是怎么发现的
2024-02-15 12:37:24
大佬的名字哈哈哈哈
2024-01-30 19:39:56
#include <stdio.h>
int main()
{
	int L,R;
	int none=0;
	scanf("%d%d",&L,&R);
	for(int i=L;i<=R;i++){
		if(i%2==0&&i%4!=0){
			none++;
		}
	}
	printf("%d",R-L+1-none);
}
2024-01-27 20:58:25