【做题记录】CF194B Square
Problem
Solution
这是一道比较有趣的数学题。
我们设结果为 \(x+1\),为什么 \(+1\) 呢?为的是后面好计算。这里加的 \(1\) 是最开始放的那个。
容易看出题意就是从 \(0\) 开始,每次加 \(n+1\) 再对 \(4n\) 取模,直到变成 \(0\) 为止。问这样的操作要几次。于是可以列出下面这个方程:
\[x(n+1) \equiv 0 \pmod{4n}
\]
\[xn+x \equiv 0 \pmod{4n}
\]
到这里好像没有头绪了……
可以想到结果应该是和 \(4\) 有关的,于是我们可以分类讨论下。
(由于题目要求,算出来的都是最小正整数解,所以下面直接用 \(=\) 了QAQ)
当 \(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\),于是就能得到
\[x=4n
\]
当 \(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;
}