【洛谷】P1348

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为偶数,一定可以拆成2
k的形式,如果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<

你可能感兴趣的:(【洛谷】P1348)