解题思路:
规律:只有当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 人评分
x=(y-z)(y+z) 1,3,4,5 是基础,然后两个括号乘以一个数往外拓展 因为奇数本身就满足 奇数乘以奇数还是奇数还满足 所以不用乘以奇数,只需乘以偶数,而偶数只需乘以2就能拓展到,两个阔号都乘以2,那就是乘以4
我只能发现x为奇数时是满足的,但是x为4的倍数是怎么来的???
黑魔导 2024-02-28 00:10:44 |
我知道4怎么来了
dotcpp0750343 2024-03-27 12:03:46 |
怎么来的求教
Harbour 2024-04-08 14:08:44 |
@dotcpp0750343 (y-z)(y+z)如果是两个偶数的时候,除0以外的偶数都是2的倍数,两个相乘就是四的倍数了
当x为奇数或4的倍数时才能拆分为两个数的平方差,这到底是怎么发现的
hzh 2024-02-23 22:25:40 |
平方差,l*l-r*r=(l+r)*(l-r),奇乘偶等于奇,偶成偶最小也是4,以为x^2函数越来越陡,最小的差就是2^2-0^2,再往上就是次小就是4^2-2^2,也是12,也感觉出来肯定是4的倍数了
#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); }
C语言训练-角谷猜想 (C++代码)(3N+1问题)浏览:1850 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:1158 |
C语言程序设计教程(第三版)课后习题11.8 (C语言代码)浏览:640 |
C语言程序设计教程(第三版)课后习题10.5 (C语言代码)浏览:1484 |
C语言程序设计教程(第三版)课后习题6.1 (C语言代码)浏览:641 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:940 |
C语言程序设计教程(第三版)课后习题8.2 (C语言代码)浏览:5275 |
wu-淘淘的名单 (C++代码)浏览:1532 |
WU-陶陶摘苹果2 (C++代码)浏览:1018 |
IP判断 (C语言代码)浏览:819 |