原题链接:蓝桥杯2023年第十四届省赛真题-平方差
解题思路:
如果用当纯的数学公式一个一个代入计算,必定超时
所以只能找规律(该数是4的倍数或者该数是奇数)
如图:![]()

这个规律的代码实现:
int sum = 0;
	long long L = 0;
	long long R = 0;
	scanf("%d %d", &L, &R);
	for(int i=L;i<=R;i++)
	{
		for(int j=1;j<=sqrt(i);j++)//找因子
		{
			if(i%j==0)//j是不是该数的因子
			{
				long long y = i / j;
				if (y%2==0&&j%2==0||y%2!=0&&j%2!=0)//这对因子的奇偶性是否相同
				{
					sum++;
					break;
				}
			}
			
			
			
		}
		
	}
	printf("%d", sum);但是范围一大就会超时。所以要优化:
怎么优化呢?????
从图得出的规律进一步总结:
1、当该数的一对因子都是偶数时,这对因子分别是2的倍数,即一个因子%2==0,所以一对因子就相当于该数%4==0,即是4的倍数
2、当该数的一对因子都是奇数时,由数学知识得:奇数*奇数=奇数,可推出,该数为奇数。
3、综上所述:一个数有平方差,就是该数是4的倍数或者该数是奇数
注意事项:
1、接收范围的变量的数据类型是int,不要用long long会超时
参考代码:
#include  
void test90()
{
    int sum = 0;
    int  L = 0;
    int  R = 0;
    scanf("%d %d", &L, &R);
    for(int i=L;i<=R;++i)
    {
        if(i%4==0||i%2!=0)
        {
            sum++;
  
        }
    }
    printf("%d", sum);
  
}
int main()
{
test90();
    return 0;
}0.0分
53 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复