题解 3142: 蓝桥杯2023年第十四届省赛真题-平方差

来看看其他人写的题解吧!要先自己动手做才会有提高哦! 
返回题目 | 我来写题解

筛选

3142: 蓝桥杯2023年第十四届省赛真题-平方差

解题思路:此题可以用三个for循环直接求解(即蛮力法),但是求出来之后会显示时间超时,看了一下别人的方法,可以直接用公式求解,即:F(x)=x/4+(x+1)/2此公式求出来是小于x的满足条件的数的个数,但是这个公式我也不知道是怎么推出来的,而且我觉得这种题不具有通用性,所以只需要记住公式就行。

3142: 蓝桥杯2023年第十四届省赛真题-平方差(C++)

**当所给数的范围极大时,不能盲目循环,尝试找规律破解有平方差的数要么是奇数,要么是4的倍数**```cpp#includeusingnamespacestd;intF(intx){//x/4表示1到r上4的倍数,(x+1)/2表示1到r上的奇数个数returnx/4+(x+1)/2;}intmain

去掉余数为2的数即可

关键在于,如何判断某个数是不是平方差```c++#includeusingnamespacestd;boolfunction(intx){boolres=false;if(x%2==1&&x>=3)res=true;if(x>=8&&x%4==0)res=true;returnres;}intmain

根据公式找规律

思路:由原公式可得$$x=(y+z)(y-z)$$,显然x被分解成了两个因数y+z和y-z。设$$a=y+z,b=y-z$$,则$$y=(a+b)/2,z=(a-b)/2$$,y和z都是整数,要使方程有解,a和b只有两种情况:全为奇数或全为偶数。

纯规律,不使用循环

摘要:解题思路:找到规律,不能被平分差的数的是 (x-2)%4 == 0, 然后判断 L,R中有多少个这样的数注意事项:参考代码:#include<bits/stdc++.h>#define ikun co……