https://www.luogu.org/problemnew/show/P1348
思路:拆成n=xy(x>=y)
设a+b=x,a-b=y则a=(x+y)/2,b=(x-y)/2
若n是couple数则一定要满足x+y是偶数,x-y是偶数
如果n为偶数,一定可以拆成2k的形式,如果k为偶数,则为couple数;k为奇数,k一定能拆成奇乘奇的形式,不管怎么搭配n一定是被拆成n=(2奇)(奇)=偶奇的形式(偶+奇)不可能整除,所以不是couple数
如果n为奇数,则一定能拆成1奇的形式,(1+奇)肯定能被2整除,所以所有奇数都是couple数
代码:
bool iscouple(long long n)
{
if(n<0) n=-n;
int sqr=(int)sqrt(1.0*n);
if(n==0||n%2==1||sqr*sqr==n) return true;
if(n%2==0)
{
if((n/2)%2==0)
return true;
else
return false;
}
}
int main()
{
long long a,b,cnt;
cin>>a>>b;
cnt=0;
for(int i=a;i<=b;i++)
{
if(iscouple(i))
cnt++;
}
cout<<cnt;
return 0;
}