【CF194B Square】題解
阿新 • • 發佈:2020-11-25
Problem
Solution
這是一道比較有趣的數學題。
我們設結果為 \(x+1\),為什麼 \(+1\) 呢?為的是後面好計算。這裡加的 \(1\) 是最開始放的那個。
容易看出題意就是從 \(0\) 開始,每次加 \(n+1\) 再對 \(4n\) 取模,直到變成 \(0\) 為止。問這樣的操作要幾次。於是可以列出下面這個方程:
到這裡好像沒有頭緒了……
可以想到結果應該是和 \(4\) 有關的,於是我們可以分類討論下。
(由於題目要求,算出來的都是最小正整數解,所以下面直接用 \(=\)
當 \(n \equiv 0 \pmod 4\) 時,顯然
\[xn \equiv 0 \pmod{4n} \]所以 \(x \equiv 0 \pmod{4n}\),容易得到
\[x=4n \]當 \(n \equiv 1 \pmod 4\) 時,可以像上面那樣算出 \(x+x \equiv 0 \pmod{4n}\),所以又可以得到
\[2x=4n \]\[x=2n \]當 \(n \equiv 2 \pmod 4\) 時,又可以得到 \(2x+x \equiv 0 \pmod{4n}\),此時可以得到
\[x=\frac{4}{3}kn \]顯然題目要讓 \(k\) 儘量小且結果為正整數,所以 \(k=3\)
當 \(n \equiv 3 \pmod 4\) 時,可以得到
\[3x+x \equiv 0 \pmod{4n} \]\[x \equiv 0 \pmod n \]\[x=n \]整理一下就是:
- 當 \(n \bmod 4=0\)時,\(ans=4n+1\)
- 當 \(n \bmod 4=1\)時,\(ans=2n+1\)
- 當 \(n \bmod 4=2\)時,\(ans=4n+1\)
- 當 \(n \bmod 4=3\)時,\(ans=n+1\)
\(ans\) 表示題目要求的答案。
code
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; long long T,n; int main() { scanf("%lld",&T); while(T--) { scanf("%lld",&n); switch(n%4) { case 0:printf("%lld\n",4*n+1);break; case 1:printf("%lld\n",2*n+1);break; case 2:printf("%lld\n",4*n+1);break; case 3:printf("%lld\n",n+1);break; } } return 0; }