poj 1060 Modular multiplication of polynomials

题目大意:规定加法和减法操作都是异或操作;乘法,除法操作不变。给你三个多项式f,g,h,求出f * g / h 的余下的多项式。

思路:高精度问题,按照题目要求模拟就行。


#include <iostream>
#include <cstdio>

using namespace std;

int main(int argc, char** argv)
{
    int test_cases,i,j;
    int polynomial[3][1005],degree[4],product[2005],max_degree;
    scanf("%d",&test_cases);
    while (test_cases--)
    {
        for (i=0;i<3;i++)
        {
            scanf("%d",&degree[i]);
            for (j=degree[i]-1;j>=0;j--)
                scanf("%d",&polynomial[i][j]);
        }
        memset(product,0,sizeof(product));
        for (i=0;i<degree[0];i++)
            for (j=0;j<degree[1];j++)
                product[i+j]^=polynomial[0][i]&polynomial[1][j];
        max_degree=2005;
        while (1)
        {
            for (i=max_degree-1;product[i]==0;i--);
            max_degree=i;
            if (max_degree<degree[2]-1)
                break;
            for (j=degree[2]-1;j>=0;i--,j--)
                product[i]^=polynomial[2][j];
        }
        printf("%d",max_degree+1);
        for (i=max_degree;i>=0;i--)
            printf(" %d",product[i]);
        printf("\n");
    }
    return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值