这是一道比较有趣的数学题。
咱们设结果为 \(x+1\),为何 \(+1\) 呢?为的是后面好计算。这里加的 \(1\) 是最开始放的那个。
容易看出题意就是从 \(0\) 开始,每次加 \(n+1\) 再对 \(4n\) 取模,直到变成 \(0\) 为止。问这样的操做要几回。因而能够列出下面这个方程:spa
到这里好像没有头绪了……
能够想到结果应该是和 \(4\) 有关的,因而咱们能够分类讨论下。code
(因为题目要求,算出来的都是最小正整数解,因此下面直接用 \(=\) 了QAQ)get
当 \(n \equiv 0 \pmod 4\) 时,显然数学
因此 \(x \equiv 0 \pmod{4n}\),容易获得string
当 \(n \equiv 1 \pmod 4\) 时,能够像上面那样算出 \(x+x \equiv 0 \pmod{4n}\),因此又能够获得it
当 \(n \equiv 2 \pmod 4\) 时,又能够获得 \(2x+x \equiv 0 \pmod{4n}\),此时能够获得io
显然题目要让 \(k\) 尽可能小且结果为正整数,因此 \(k=3\),因而就能获得class
当 \(n \equiv 3 \pmod 4\) 时,能够获得di
整理一下就是:
\(ans\) 表示题目要求的答案。
#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; }