解题思路:
如果用当纯的数学公式一个一个代入计算,必定超时
所以只能找规律(该数是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分
78 人评分
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:569 |
C语言程序设计教程(第三版)课后习题7.5 (C语言代码)浏览:546 |
程序员的表白 (C语言代码)浏览:1472 |
C语言训练-求s=a+aa+aaa+aaaa+aa...a的值 (C语言代码)浏览:1031 |
2003年秋浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:541 |
简单的for循环浏览:1411 |
【求[X,Y]内被除3余1并且被除5余3的整数的和】 (C语言代码)浏览:675 |
数列有序 (C语言代码)浏览:935 |
买不到的数目 (C语言代码)浏览:3094 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:360 |
uq_53673432948 2023-11-04 22:43:40 |
别人不是证出来了吗,分母是2,如果这个数存在且是整数,那一定是2的倍数,下面程序就是求m,k存在的情况
绘凉 2023-11-08 20:56:13 |
他应该是写错了
绘凉 2023-11-08 20:56:36 |
他应该是写错了
Why 2023-12-01 22:04:36 |
啊,真滴吗
peanut 2024-01-07 10:18:15 |
赞
hethtina 2024-01-24 21:31:23 |
要么同奇要么同偶,倒是不影响后面推导