zoukankan      html  css  js  c++  java
  • 【做题记录】CF194B Square

    Problem

    CF194B Square

    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 mod 4=0)时,(ans=4n+1)
    • (n mod 4=1)时,(ans=2n+1)
    • (n mod 4=2)时,(ans=4n+1)
    • (n mod 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
    ",4*n+1);break;
    			case 1:printf("%lld
    ",2*n+1);break;
    			case 2:printf("%lld
    ",4*n+1);break;
    			case 3:printf("%lld
    ",n+1);break;
    		}
    	}
    	return 0;
    }
    
  • 相关阅读:
    PHP编程资源
    JSP+Java编程资源
    Word、Excel办公书的资源下载
    听你说
    一些好看的渐变色(配色)网站推荐
    js判断数组中是否包含某个元素
    你才是你故事的作者
    vue-color 颜色选择器插件用法介绍
    vue-cli3 导入.md文件,vue中markdown文件的解析与渲染
    新版 animate.css 在vue中的正确使用
  • 原文地址:https://www.cnblogs.com/mk-oi/p/14032947.html
Copyright © 2011-2022 走看看