题目描述
任何一个整数N都能表示成另外两个整数a和b的平方差吗?如果能,那么这个数N就叫做Couple number。你的工作就是判断一个数N是不是Couple number。
输入输出格式
输入格式:
仅一行,两个长整型范围内的整数n1和n2,之间用1个空格隔开。
输出格式:
输出在n1到n2范围内有多少个Couple number。
注意:包括n1和n2两个数,且n1<n2,n2 - n1 <= 10 000 000。
输入输出样例
输入样例#1: 复制
1 10
输出样例#1: 复制
7
解析:本题若是暴力枚举,时间一定会爆,so我们想到了数论√
(1)a^2-b^2=(a+b)(a-b)=>a+b与a-b奇偶性相同
(2)所以(a+b)(a-b)要么是奇数,要么是4的倍数
(3)couple number要么是奇数,要么是4的倍数
如何证明:
AB均奇,A+B为偶,A-B也为偶,奇偶性相同
AB均偶,A+B偶,A-B也为偶,奇偶性相同
A奇B偶,A+B奇,A-B也为奇,奇偶性相同
A偶B奇,A+B为奇,A-B也为奇,奇偶性相同
【好累啊嘤嘤嘤~~~~~,代码很短,思路很巧】
#include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<algorithm> #include<cmath> typedef long long ll; using namespace std; int n1,n2,ans=0; int main(){ cin>>n1>>n2; for(int i=n1;i<=n2;i++) if(i%4==0||i%2!=0)ans++; cout<<ans<<endl; return 0; }