• 水题两篇 Dream & Find Integer (HDU 6440/6441)


     // 出自ICPC 2018网络赛C - Dream & D - Find Integer

     // 对大佬来讲的水题,本菜鸡尽量学会的防爆零题。。。

     // 今晚翻看vjudge昨日任务上的C题,发现好多人一发过了,我想它应该不难吧,但自己始终没想明白,到底该如何构造一种符合题意封闭的加法和乘法运算。

     // 参考了这里的说明,才完全弄懂了,写点东西记录学习成果。

    C - Dream (HDU 6440)

          题目要求重新定义加法和乘法,对任意非负整数都满足:(m+n)p=mp+np,其中p为素数。 之前我在数论部分的博客已经提到过费马小定理,比赛时候面对这题时竟然完全没有联想到,反倒还被题目的各种概念给绕晕。这里再次说明费马小定理

    假如p是质数,且gcd(a,p)=1,那么 ap-1≡1(mod p)

          这样就找到了符合题意的运算,即模p加法与模p乘法。明白这一点,代码就很简单了:

     

    #include <cstdio>.
    #include <iostream>
    #define sci(i) scanf("%d", &i)
    #define rep(i, a, b) for(int i=a;i<b;i++)
    using namespace std;
    
    int main()
    {
        int T;  sci(T);
        while(T--)
        {
            int p;  sci(p);
            rep(i, 0, p)
            {
                rep(j, 0, p)
                    printf("%d ", (i+j)%p);
                printf("
    ");
            }
    
            rep(i, 0, p)
            {
                rep(j, 0, p)
                    printf("%d ", i*j%p);
                printf("
    ");
            }
        }
        return 0;
    }
    View Code

      // 第一次尝试用以上宏定义#define的新姿势,代码更显简短清爽~~~

     

    D - Find Interger (HDU 6441)

          题意很明朗: 给定a和n,求满足条件 an+bn=cn 的正整数b和c。

     // 上一行会吞字,原因不明。。。

     // 避免吞字,截图插入。。。

     // 左边原文,右边显示

          这费马大定理有关:

    当整数时,关于的方程没有正整数解

          那么题目就简单分四种情况:

    1. n>2,由费马大定理可知,不存在解
    2. n=0时,等式恒不成立,无解输出 -1 -1
    3. n=1时,可取b=1, c=a+1
    4. 对于n=2的解(b, c),详细见代码部分的注释
    #include <iostream>
    #include <cstdio>
    using namespace std;
    
    int n, a;
    int main()
    {
        int T;
        cin>>T;
        while(T--)
        {
            scanf("%d %d", &n, &a);
            if(n>2||n==0) {printf("-1 -1
    "); continue; }
            if(n==1) {printf("1 %d
    ", a+1); continue; }
            else
            { //a*a = c*c - b*b = (c-b)*(c+b)
                if(a&1) // c-b=1, c+b=a*a
                    printf("%d %d
    ", (a*a-1)/2, (a*a+1)/2);
                else // c-b=2, c+b=a*a/2
                    printf("%d %d
    ", (a*a/2-2)/2, (a*a/2+2)/2);
            }
        }
        return 0;
    }

         

    End.

  • 相关阅读:
    js如何将字符串作为函数名调用函数
    js如何生成[n,m]的随机数
    UIMenuController,UIPasteboard:复制,粘贴详细解释
    python2.7和 python3.4但是不要
    Android IPC通信和AIDL技术应用
    可穿戴式智能设备,其潜在的安全问题?(上)
    CentOS安装KVM步骤虚拟机,绝对实用!
    Python于*args 和**kwargs使用
    uva 1556
    JSCover+WebDriver/Selenium获得JS 代码覆盖
  • 原文地址:https://www.cnblogs.com/izcat/p/9545079.html
Copyright © 2020-2023  润新知