poj 1060 Modular multiplication of polynomials

方法(无证明,lz弱渣请谅解):

以样例来讲:(x^6 + x^4 + x^2 + x + 1) (x^7 + x + 1) modulo (x^8 + x^4 + x^3 + x + 1) = x^7 + x^6 + 1 。

(x^6 + x^4 + x^2 + x + 1) (x^7 + x + 1) =x^13 + x^11 + x^9 + x^8 + x^6 + x^5 + x^4 + x^3 + 1 。

令a=x^13 + x^11 + x^9 + x^8 + x^6 + x^5 + x^4 + x^3 + 1 ,b=x^8 + x^4 + x^3 + x + 1;

求a/b的余数,首先b*x^(13-8),由于系数为0或1,所以a=   b*(x^(13-8))异或a=x^11+x^4+x^3+1

11>8重复上述步骤:a= b*(x^(11-8))异或 a=x^7+x^6+x^5+1 

7<8得结构,因此(x^6 + x^4 + x^2 + x + 1) (x^7 + x + 1) modulo (x^8 + x^4 + x^3 + x + 1) = x^7 + x^6 + 1= x^7+x^6+x^5+1 

主要就这个不好做,其他都好写

#include <iostream>
#include <cstdio>
#include <cstring>using namespace std;
const int maxn=2010;
//f,g,h存储的是多项式的系数,sum存储的是f*g的系数以及最后余数的系数
int f[maxn],g[maxn],h[maxn],sum[maxn];
int lf,lg,lh,ls;//分别为f,g,h,sum的最高次幂//比较sum表示的多项式与h表示的多项式的大小
int compare() {if(ls<lh)return -1;if(ls>lh)return 1;for(int i=ls-1; i>=0; i--) {if(sum[i]==h[i])continue;if(sum[i]>h[i])return 1;if(sum[i]<h[i])return -1;}return 0;
}
int main() {int t,d;scanf("%d",&t);while(t--) {memset(h,0,sizeof(h));memset(sum,0,sizeof(sum));//将f多项式的信息存入f数组scanf("%d",&d);lf=d-1;for(int j=lf; j>=0; j--) {scanf("%d",&f[j]);}//将g多项式的信息存入g数组scanf("%d",&d);lg=d-1;for(int j=lg; j>=0; j--) {scanf("%d",&g[j]);}//将h多项式的信息存入h数组scanf("%d",&d);lh=d-1;for(int j=lh; j>=0; j--) {scanf("%d",&h[j]);}//计算f*g的多项式ls=lf+lg;for(int i=lf; i>=0; i--) {for(int j=lg; j>=0; j--) {sum[i+j]=sum[i+j]^(f[i]&g[j]);}}/*关键是怎么求余数,这里是先判断sum多项式是否大于h多项式,若大于,则sum减一次h,减去后的信息存入sum中。再继续判断,直到sum小于h,则此时的sum为余数。总之,就是把除法改成较简单的减法操作。*/while(compare()>=0) {d=ls-lh;for(int i=ls; i-d>=0; i--) {sum[i]=sum[i]^h[i-d];}while(ls && !sum[ls])ls--;}printf("%d",ls+1);for(int i=ls; i>=0; i--) {printf(" %d",sum[i]);}printf("\n");}return 0;
}

参考http://www.cnblogs.com/chenxiwenruo/p/3332698.html

转载于:https://www.cnblogs.com/Scale-the-heights/p/4351887.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/291648.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IT人的自我导向型学习:学习的4个层次

[原文链接] 谈起软件开发一定会想到用什么技术、采用什么框架&#xff0c;然而在盛行的敏捷之下&#xff0c;人的问题逐渐凸显出来。不少企业请人来培训敏捷开发技术&#xff0c;却发现并不能真正运用起来&#xff0c;其中一个主要原因就是大家还没有很好的学习能力。没有学习&…

.NET Core分析程序集最优美的方法,不用Assembly.LoadFile(),超越ReflectionOnlyLoad

在编写.NET程序的时候&#xff0c;如果需要对一个程序集文件进行分析&#xff0c;我们可以使用Assembly.LoadFile()来加载这个程序集&#xff0c;然后对LoadFile()方法返回的Assembly对象进行进一步的分析。但是Assembly.LoadFile()方法会以执行为目的把程序集加载到程序中&…

C#学习笔记——通用对话框

Visual Studio提供的通用对话框控件有&#xff1a;ColorDialog、FolderBrowserDialog、FontDialog、OpenFileDialog、SaveFileDialog、PageSetupDialog、PrintDialog和PrintPreviewDialog。 在使用这些中的某个“通用对话框”控件时&#xff0c;可以向窗体添加该控件&#xff0…

动态ram依靠什么存储信息_ROM、RAM、DRAM、SRAM和FLASH傻傻分不清

ROM、RAM、DRAM、SRAM和FLASH各类储存器在电脑、手机、电子设备、嵌入式设备及相应的开发中普遍应用的&#xff0c;但是很多还是傻傻分不清楚。下面就简单介绍下这几个吧&#xff01;ROM和RAMROM&#xff1a;只读存储器或者固化存储器&#xff1b;RAM&#xff1a;随机存取存储器…

软件项目管理课后题下载【共5个章(1、3、4、5、6)】

都整理好了&#xff0c;链接在此&#xff1a;https://download.csdn.net/download/qq_44872173/15560093 目录如下&#xff1a;

linux c之snprintf()和sprintf()区别

1、snprintf函数 int snprintf(char *str, size_t size, const char *format, ...); 将可变个参数(...)按照format格式化成字符串,然后将其复制到str中 (1) 如果格式化后的字符串长度 < size,则将此字符串全部复制到str中,并给其后添加一个字符串结束符(/0); (2) 如果…

Chrome中输入框默认样式移除

Chrome中输入框默认样式移除 在chrome浏览器中会默认给页面上的输入框如input、textarea等渲染浏览器自带的边框效果 IE8中效果如下&#xff1a; Chrome中效果如下&#xff1a; 这在我们未给输入框设置获取焦点时改变边框颜色时&#xff0c;chrome浏览器解析页面中默认将输入框…

MBR解析

先推广一下QQ群&#xff1a;61618925。欢迎各位爱好编程的朋友加入。 一、程序界面 二、关键部分代码&#xff1a; 1.数据结构定义 #define MBRSIZE 512 #define BOOTRECORDSIZE 440 #define DISKSIGNEDSIZE 4 #define RESERVESIZE 2 #define DPTNUMBER 4 #define DPTSIZE 16 #…

css sprite讲解与使用实例

转自&#xff1a;http://www.manongjc.com/article/886.html 一、什么是css sprites css sprites直译过来就是CSS精灵。通常被解释为“CSS图像拼合”或“CSS贴图定位”。其实就是通过将多个图片融合到一张图里面&#xff0c;然后通过CSS background背景定位技术技巧布局网页背景…

如何通过 HttpWebRequest 上传文件?

咨询区 dr. evil我不希望通过 WebDAV 文件夹的方式上传文件&#xff0c;我想通过相关的 HttpWebRequest 类&#xff0c;类库或者代码片段来帮我模拟浏览器行为来上传文件&#xff0c;请问是否有好的解决方案&#xff1f;回答区 Joshcodes如果你用的是基于 .NET 4.5 以上的版本&…

实验 2 关键字驱动测试(2 学时)实验报告--软件功能测试与性能测试实验

以下是实验要求部分&#xff1a;&#xff08;小伙伴们根据自己需求决定是否下载哈&#xff09; 下载位置链接&#xff1a;https://download.csdn.net/download/qq_44872173/20031354

小手工纸盒机器人_亲子手工 | DIY弹珠迷宫小黑手自制玩具系列

上周用鞋盒做的迷你桌球受到很多男孩子的喜欢今天小黑手又做了一个瓦楞纸手工「弹珠迷宫」也是喜欢的爱不释手呢暑假小黑手系列&#xff0c;希望也能攒出个自己的小游乐场自己动手做自己的玩具&#xff0c;买玩具的钱可以省了快速手工教程Let’s do it我们一起做起来吧&#xf…

linux网络编程之用select方法实现io复用(基于udp)

1、基本概念 IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。IO多路复用适用如下场合:   (1)当客户处理多个描述字时(一般是交互式输入和网络套接口),必须使用I/O复用。   (2)当一个客户同时处理多个套接口时,而这种情况是可能…

Linux screen 常用命令

想必&#xff0c;只要接触过Linux一段时间的人&#xff0c;一定知道screen这个神奇的工具了&#xff0c;它主要有如下些优势&#xff1a; 1. 后台运行&#xff1a;当你在ssh terminal执行shell时&#xff0c;如果网络这时断开&#xff0c;你的程序会怎样&#xff1f;TERMINATED…

实验 3 检查点和参数化实验报告--软件功能测试与性能测试实验

实验报告下载链接&#xff1a; https://download.csdn.net/download/qq_44872173/20031539 实验要求部分&#xff1a;

SNS社区

SNS&#xff0c;全称Social Networking Services&#xff0c;即社会性网络服务&#xff0c;专指旨在帮助人们建立社会性网络的互联网应用服务。1967年&#xff0c;哈佛大学的心理学教授Stanley Milgram(1933&#xff5e;1984)创立了六度分割理论&#xff0c;简单地说&#xff1…

C#中的语句

寄语接下来几篇文章&#xff0c;将和大家一起简单回顾下C#中常规的语法&#xff0c;也是平常我们在编码过程中都使用的。今天来介绍下C#中的语句。一般科班出身的程序猿们大家第一个学习的语言基本都是C语言&#xff0c;C语言里面在刚开始就介绍了语句。C#中介绍的语句和C中的基…

track文件 什么是git_Git 从入门到放弃命令大全

对于刚学 Git 的朋友来说太痛苦了&#xff0c;一堆命令&#xff0c;于是就有了这篇文章&#xff0c;对于常用的命令进行梳理。Workspace&#xff1a;工作区Index / Stage&#xff1a;暂存区Repository&#xff1a;仓库区(或本地仓库)Remote&#xff1a;远程仓库1. 初始化 在当前…

【51NOD】1201 整数划分

【题意】将n划分成不同正整数的和的方案数。 【算法】动态规划 【题解】 暴力&#xff1a;f[i][j]:只用前1..i的数字&#xff0c;总和为j的方案数 本质上是01背包&#xff0c;前i个物体&#xff0c;总质量为j的方案数 f[i][j]f[i-1][j]f[i-1][j-i] 复杂度O(n^2) 优化&#xff1…

linux c之assert函数使用总结

1、assert函数介绍 assert宏的原型定义在<assert.h>中&#xff0c;其作用是如果它的条件返回错误&#xff0c;则终止程序执行&#xff0c;原型定义&#xff1a;#include <assert.h> void assert( int expression ); assert的作用是现计算表达式 expression &#x…