構造:結論題,gcy數競大佬tql%%%orz。
結論
先放結論:如果 \(x \bmod 4=2\) ,那麼 \(x\) 無法被表示為 \(a^2-b^2\) 的形式;除此之外的其他數都可以。
證明
對 \(a^2-b^2\) 因式分解,得 \(x=(a+b)(a-b)\) 。
當 \(x \bmod 2=1\) 時
包含 \(x \bmod 4=1\) 和 \(x \bmod 4=3\) 的情況。
嘗試構造 :
\[\begin{cases} x+y=n \\x-y=1\end{cases}
\]
解得:
\[\begin{cases} x=\frac{n+1}{2} \\y=\frac{n-1}{2}\end{cases}
\]
因為 \(x\) 為奇數,所以 \(x,y\) 皆為整數,成立。
當 \(x \bmod 4=0\) 時
把 \(4\) 提出來:
\[x=4t=(x+y)(x-y)
\]
所以設 \(x+y=2m,x-y=2k\) ,\(m,k\) 皆為整數 。
則解得
\[\begin{cases} x=m+k \\y=m-k\end{cases}
\]
顯然 \(x,y\) 為整數,成立。
當 \(x \bmod 4=2\) 時
把 \(2\) 提出來:
\[x=2t=(x+y)(x-y)
\]
所以設 \(x+y=2m,x-y=k\) ,\(m,k\) 皆為奇數 。因為 \(2m\) 已經是偶數了,如果 \(k\) 還是偶數,那麼就 \(x \bmod 4=0\),與題設矛盾,不成立 。
則解得
\[\begin{cases} x=\frac{2m+k}{2}=m+\frac{k}{2} \\y=\frac{2m-k}{2}=m-\frac{k}{2}\end{cases}
\]
顯然 \(x,y\) 為不是整數,不成立。
因此得證。
程式碼細節
注意 \(l,r\) 都是負數時加特判,把他變成正數的情況。
因為 c++ 在對負數取模時,會先把負數去掉,把他當成正數後取模,最後再加上負號。和我們先模在加再模的方式不同。
程式碼
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pi;
ll t,l,r;
int main()
{
freopen("construct.in","r",stdin);
freopen("construct.out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>t;
while(t--)
{
cin>>l>>r;
ll rg=r-l+1;
if(r<0)
{
l*=-1;
r*=-1;
swap(l,r);
}
if(r%4==0)r-=2;
else if(r%4==1)r-=3;
else if(r%4==3)r-=1;
cout<<rg-ll(ceil((r-l+1)/4.0))<<endl;
}
return 0;
}