ROG


私信TA

用户名:dotcpp0688243

访问量:5196

签 名:

等  级
排  名 2364
经  验 2280
参赛次数 0
文章发表 8
年  龄 0
在职情况 学生
学  校 广东技术师范大学
专  业 数字媒体技术

  自我简介:

解题思路:

如果用当纯的数学公式一个一个代入计算,必定超时

所以只能找规律(该数是4的倍数或者该数是奇数

如图:_-1569185504__bb0f7607d6b1b4bc14832308f48287dd_-1041684922_Screenshot_20231025_122043_Samsung Notes_0_wifi_0.jpg_-1569185504__bb0f7607d6b1b4bc14832308f48287dd_-1041684922_Screenshot_20231025_122043_Samsung Notes_0_wifi_0.jpg


这个规律的代码实现:

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分

79 人评分

  评论区

这说半天其实找规律就可以得出奇数和4的倍数满足,关键是有一组会超时,你后面的代码也会超时啊
2024-03-04 20:29:59
这TM是在做编程?
2024-03-02 20:49:20
要么同奇要么同偶,倒是不影响后面推导
2024-01-24 21:20:39
我同意赵某的说法,m,k不一定是偶数,但是x+y和y-x一定是偶数,有一点不严谨
2024-01-07 10:17:46
优雅
2023-12-26 11:36:28
流批,太优雅呢
2023-12-20 20:33:17
2023-12-12 20:11:31

                        
2023-12-05 16:00:39