高次同余方程式的解数及解法

定理一:

是k个两两互质的正整数,,则同余式

      

                                    (1)


与同余式组

      

           (i=1,2,3,...,k)          (2)


等价,并且若用表示对模的解数,T表示(1)式对模m的解数,


则:


所以求多项式的解可以用上述方法,先分解分别求出各个解再合并。



定理二:p是素数,r>=2是整数,是整系数多项式,设是同余方程


的一个解,以表示的导数。


(1)若,则存在整数t,使是同于方程的解。


(2)若,并且,则对于t=0,1,2,3,...,p-1,中的


x都是方程的解。



2013年全国邀请赛长沙赛区的E题就是利用上述的定理。


题目:Special equations


题目大意 :

给定函数 f(x) = a_n x^n + ... + a_1 a + a_0, pri为质数,求一个x使得,f(x) = 0 \mbox{ mod } pri * pri, 如果没有,输出No Solution.


首先求得所有的i,使得 f(i) = 0 \mbox{ mod } pri

然后分别验证所有的  x =  i + j * pri ( 0 \le j < pri ) , 是否满足 f(x) = 0 \mbox{ mod } pri * pri

由于在第一次枚举的时候保留下来的i不会很多,第二次暴力枚举的时候复杂度不会很大。

#include <iostream>
#include <string.h>
#include <stdio.h>

using namespace std;
typedef long long LL;

const int N=105;

LL a[N];
LL temp[N];

LL Equ(LL n,LL x)
{
    if(n==1)      return a[1]*x+a[0];
    else if(n==2) return a[2]*x*x+a[1]*x+a[0];
    else if(n==3) return a[3]*x*x*x+a[2]*x*x+a[1]*x+a[0];
    else if(n==4) return a[4]*x*x*x*x+a[3]*x*x*x+a[2]*x*x+a[1]*x+a[0];
}

int main()
{
    LL T,n,i,j,p,k,tt=1;
    cin>>T;
    while(T--)
    {
        cin>>n;
        for(i=n;i>=0;i--)
           cin>>a[i];
        cin>>p;
        k=0;
        for(i=0;i<p;i++)
        {
            if(Equ(n,i)%p==0) 
            {
                temp[k++]=i;
            }
        }
        if(k==0)
        {
            printf("Case #%I64d: No solution!\n",tt++);
            continue;
        }
        LL ret=-1;
        for(i=0;i<k;i++)
        {
            bool flag=0;
            for(j=0;j<p;j++)
            {
                LL x=(temp[i]+j*p);
                if(Equ(n,x)%(p*p)==0)
                {
                    ret=x;
                    flag=1;
                    break;
                }
            }
            if(flag) break;
        }
        if(ret==-1)
        {
            printf("Case #%I64d: No solution!\n",tt++);
            continue;
        }
        printf("Case #%I64d: %I64d\n",tt++,ret);
    }
    return 0;
}


  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
50多种数学算法的源代码. 第1章线性代数方程组的解法 1.全主元高斯约当消去法 2.LU分解法 3.追赶法 4.五对角线性方程组解法 5.线性方程组解的迭代改善 6.范德蒙方程组解法 7.托伯利兹方程组解法 8.奇异值分解 9.线性方程组的共轭梯度法 10.对称方程组的乔列斯基分解法 11.矩阵的QR分解 12.松弛迭代法 第2章插值 1.拉格朗日插值 2.有理函数插值 3.三次样条插值 4.有序表的检索法 5.插值多项 6.二元拉格朗日插值 7.双三次样条插值 第3章数值积分 1.梯形求积法 2.辛普森求积法 3.龙贝格求积法 4.反常积分 5.高斯求积法 6.三重积分 第4章特殊函数 1.г函数、贝塔函数、阶乘及二项系数 2.不完全г函数、误差函数 3.不完全贝塔函数 4.零阶、一阶和任意整数阶的第一、二类贝赛函数 5.零阶、一阶和任意整数阶的第一、二类变形贝赛函数 6.分数阶第一类贝赛尔函数和变形贝赛尔函数 7.指数积分和定指数积分 8.连带勒让德函数 第5章函数逼近 1.级数求和 2.多项和有理函数 3.切比雪夫逼近 4.积分和导数的切比雪夫逼近 5.有切比雪夫逼近函数的多项逼近 第6章特征值问题 1.对称矩阵的雅可比变换 2.变实对称矩阵为三对角对称矩阵 3.三对角矩阵的特征值和特征向量 4.变一般矩阵为赫申伯格矩阵 5.实赫申伯格矩阵的QR算法 第7章数据拟合 1.直线拟合 2.线性最小二乘法 3.非线性最小二乘法 4.绝对值偏差最小的直线拟合 第8章方程求根和非线性方程组的解法 1.图解法 2.逐步扫描法和二分法 3.割线法和试位法 4.布伦特方法 5.牛顿拉斐森法 6.求复系数多项根的拉盖尔方法 7.求实系数多项根的贝尔斯托方法 8.非线性方程组的牛顿拉斐斯方法 第9章函数的极值和最优化 1.黄金分割搜索法 2.不用导数的布伦特法 3.用导数的布伦特法 4.多元函数的下山单纯形法 5.多元函数的包维尔法 6.多元函数的共轭梯度法 7.多元函数的变尺度法 8.线性规划的单纯形法 第10章傅里叶变换谱方法 1.复数据快速傅里叶变换算法 2.实数据快速傅里叶变换算法一 3.实数据快速傅里叶变换算法二 4.快速正弦变换和余弦变换 5.卷积和逆卷积的快速算法 6.离散相关和自相关的快速算法 7.多维快速傅里叶变换算法 第11章数据的统计描述 1.分布的矩——均值、平均差、标准差、方差、斜差和峰态 2.中位数的搜索 3.均值与方差的显著性检验 4.分布拟合的X平方检验 5.分布拟合的K-S检验法 第12章解常微分方程组 1.定步长四阶龙格库塔法 2.自适应变步长的龙格库塔法 3.改进的中点法 4.外推法 第13章偏微分方程的解法 1.解边值问题的松驰法 2.交替方向隐方法
目录: 第一章 简介 1.1 计算机应用与工程问题 1.2 工程问题的解决方 第二章 MATLAB 简介 2.1 什么是MATLAB 2.2 基本功能 2.2.1 MATLAB 的视窗环境 2.2.2 简易数学 2.2.3 变数 2.2.4 其它功能 2.4 阵列与矩阵 2.4.1 简易阵列 2.4.2 建立阵列 2.4.3 阵列运算 2.4.4 特殊矩阵 2.4.5 阵列运算的特色 2.5 简易绘图 2.6 输入及输入 2.6.1 交谈的输入 2.6.2 输出格 2.7 如何撰写 MATLAB 程 2.7.1 如何在自己的目录执行程 2.8 储存及读取数据 2.9 其它绘图功能 第三章 进阶的绘图功能 3.1 绘图选项 3.1.1 横轴和纵轴的控制 3.1.2 子图 3.1.3 图形放大及缩小 3.1.4 函数分布的快速绘图 3.1.5 列印功能 3.1.6 其它的功能 3.2 三维绘图 3.1.1 三维的曲线绘图 3.1.2 曲面及等值线绘图 第四章 MATLAB函数 --- 语音讯号分析 4.1 数学函数 4.1.1 常见数学函数 4.1.2 三角和双曲线函数 4.1.3 复数 4.1.4 多项函数 4.2 数据分析函数 4.2.1 极值、平均、总和、连乘及排序 4.2.2 变异数 4.2.3 长条分布函数 4.3 选择指令及函数 4.3.1 关系及逻辑运算 4.3.2 if-else-end 语法 4.4 范例问题:语音讯号分析 4.5 使用者自定函数 4.6 乱数 4.6.1 均匀乱数 4.6.2 常态乱数 4.7 矩阵运算函数 4.8 回圈 4.8.1 For 回圈 4.8.2 While 回圈 第五章 线性代数与矩阵 --- 蛋白质分子量分析 5.1 矩阵运算 5.1.1 基本矩阵运算元 5.1.2 矩阵多项 5.3 矩阵函数 5.3.1 反矩阵、矩阵秩与行列 5.3.2 特徵值与特徵向量 5.3.3 矩阵分解 第六章 解联立方程 --- 电路分析 6.1 利用矩阵解法 6.2 范例问题:电路分析 第七章 内插及曲线拟合 --- 机械手臂路径 7.1 内插 7.1.1 一维内插 7.1.2 二维内插 7.1.3 Spline 内插 7.3 曲线契合 7.3.1 线性回归 7.3.2 多项回归 7.3.3 多项契合及函数计算 第八章 解方程根 8.1 多项的根 8.2 非线性方程的实根 第九章 数值微分及积分 --- 管流分析 9.1 数值积分 9.1.1 梯形法 9.1.2 二次函数法 9.3 数值微分 9.3.1 差分表示法 9.3.2 差分函数 第十章 解常微分方程 --- 发动机性能分析 10.1 微分方程 10.2 阮奇-库达方法 10.3 范例问题:飞机发动机的加速性能分析 10.4 高阶常微分方程 第十一章 符号运算 --- 气象气球 11.1 符号代数 11.1.1 符号表示 11.1.2 数学的化简 11.1.3 符号表示的运算 11.2 解方程 11.2.1 一般方程 11.2.2 常微分方程 11.3 微分与积分 11.3.1 微分 11.3.2 积分
实验一 列主元消去法 【实验内容】 1. 理解高斯顺序消去法; 2. 理解主元高斯消去法在求解精度上的优点; 3. 完成列主元消去法的程序; 4. 会用系统内置命令求解有唯一解的线性方程组; 【试验方法与步骤】 一 、 回答下面的问题 1. 什么是线性方程组直接解法和迭代解法,各自的特点和使用问题类型是什么? 2. LU 分解是直接解法还是迭代解法, L 、 U 矩阵的特点是什么,应用在哪些问题 中,请举例说明。 3. 给出一个舍入误差严重影响计算结果精度的例子,试着能否从多个角度说明产 生该问题的原因。 4. 迭代解法的收敛性有什么意义,收敛条件用什么判定? 5. 给出例子,并说 明迭代收敛的速度。 二 、 完成下列计算,写出代码 1. 用 crame 法则、用 LU 分解函数、逆矩阵函数分别完成 P35 例 3.2.1 2. 编写列主元消去法程序,完成 P35 例 3.2.1 和习题 3 第 2 题 3. 用雅克比、高斯 塞德尔和 SOR 迭代完成习题 3 第 13 题,进行收敛速度的比较 分析 第 2 页 共 13 页 【实验结果】 一、第一大题 1.线性方程组的解法 2.LU 分解法 1. LU 分解属于直接解法 2. L 矩阵特点:一个对角线上的元素全为1 的下三角矩阵(即单位下三角矩阵)。 3. U 矩阵特点:上三角矩阵 4. 应用:LU 分解主要应用在数值分析中,用来解线性方程、求反矩阵或计算行列 解法 直接解法 迭代解法 定义 经过有限步算数运算,可求得方程组 的精确解的方法 用某种极限过程逐步逼近线性 方程组精确解的方法 特点 运算步骤有限、可得精确解 极限逼近思想 适用问 题类型 计算过程中没有舍入误差 向量值序列收敛于向量* x 即 *) ( limx x k k = → 举例    − = + = 3 20 26 5 2 8 x y x y    = − = = = = −    − = + = * 1 * 2 53 106 2, 1 3 20 26 50 20 80 y x x x y x y x y 即有精确解 ,所以 两相加,得    − = + = 3 20 26 5 2 8 x y x y , 0,1,2,... 0.15 1.3 0.4 1.6 ( 1) ( ) ( 1) ( ) =     = − = − + + + k y x x y k k k k 改写为迭代公 其结果不断逼近精确解 然后不断迭代, 取 0,得 1.6, -1.3, (0) (0) (1) (1) x = y = x = y = 第 3 页 共 13 页 3.舍入误差严重影响计算结果精度的例子 建立 dx的递推公 x x I n n  + = 1 0 5 (教材第二页) 法1:      − = − = − 1 0 5 1 5 ln 6 ln n In n I I 法2: 由0  In  In − 1,得5In − 1  In +5In − 1  6In − 1      = − +    =  +    + =    − − − n I I I I n I n n I I n n n n n 5 1 5 1 0.0087301587 0.0087301587 2 1 ) 5 21 1 6 21 1 ( 5 1 6 1 0 1 5 1 20 20 将 1 带入上,得 1 由于计算机只能存储有限位小数,所以在法1 中,随着n 的增大,其误差就会越来 越大,最后很大程度的偏向精确解;但是在法2 中尽管20 I 取得比较粗略,但是随着n 的增大,其误差随传播逐步缩小,所以其最后计算得到的结果是可靠的。 4.迭代解法的收敛性 迭代解法 的收敛性 意义 无线逼近精确解,便于在计算机上实现编程 收敛条件的 判定 向量值序列收敛于向量x * 即 * ( ) limx x k k = → 第 4 页 共 13 页 5.举例说明迭代收敛的速度 分别用雅可比迭代法(J)、高斯—塞德尔迭代法(G-S)、超松弛迭代法(SOR)计算方组 =            − − − − 0 1 4 1 4 1 4 1 0           3 2 1 x x x =   10 8 10 雅可比迭代 高斯—塞德尔迭代 次 数 X1 X2 X3 误差 次数 X1 X2 X3 误差 1 2.5000 2.0000 2.5000 2.1594954 1 2.5000 2.6250 3.1563 1.4570586 2 3.0000 3.2500 3.0000

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值