• CF901B GCD of Polynomials 多项式 数论


    CF901B GCD of Polynomials 多项式 数论

    题意

    定义多项式的度(deg) 为多项式的最高次数。对于多项式(A(x) = sum_{k=0}^na_kx^k) 以及(B(x) = sum_{k=0}^mb_kb^k)

    有唯一的除法表示

    [A(x) = B(x)cdot D(x) + R(x) , degR(x) lt degB(x) ]

    (R(x)) 也可以定义为(A mod B)

    现给定(n) 要求构造多项式(A(x))(B(x)) 使得恰好进行n次辗转相除,其中初始的度数不得超过(n) ,系数为(-1) ,(0),(1)

    题解

    显然要进行(n)次辗转相除,A的度数一定要是(n),B的度数一定是(n - 1) ,这样相当于考虑如何使其每次恰好度数减一。

    类比斐波那契数列 (F(n) = F(n - 1) + F(n - 2)) ,其模(F(n-1)) 得到的二元组恰好是 ((F(n - 1),F(n - 2))) 相当于度数减一。

    再到此题,我们需要的多项式也直须满足(P(n) = x cdot P(n - 1) pm P(n - 2))

    考虑递推关系,令(P[i][j]) 表示最高项为(i)(j)项的系数大小有:

    [P[i][j] = P[i - 2][j] + P[i - 1][j - 1] quad (1 leq j) \边界 P[i][j] = P[i - 2][j] quad (j =0) ]

    int p[155][155];
    
    int main() {
        int n = readint();
        p[0][0] = 1;
        p[1][1] = 1;
        for(int i = 2;i <= n;i++)
            for (int j = 0; j <= i; j++) {
                if (!j) p[i][j] = p[i - 2][j];
                else p[i][j] = (p[i - 2][j] + p[i - 1][j - 1]) % 2;
            }
        printf("%d
    ", n);
        for (int i = 0; i <= n; i++) printf("%d ", p[n][i]);
        printf("%d
    ", n - 1);
        for (int i = 0; i < n; i++) printf("%d ", p[n - 1][i]);
    }
    
  • 相关阅读:
    Java IO流 简介
    Centos8安装java部署环境
    RedisTemplate
    手把手教windows上安装linux虚拟机及环境配置
    使用Swagger2构建 RESTful API文档
    VMware 安装 Centos 7 虚拟机配置网络
    别再写满屏的 try catch 了
    isEmpty 和 isBlank 的用法区别
    SpringBoot 中必须掌握的45个注解
    数组的栈方法
  • 原文地址:https://www.cnblogs.com/hznumqf/p/13535749.html
Copyright © 2020-2023  润新知