zoukankan      html  css  js  c++  java
  • 同余问题2(超详细!!!)

    中国剩余定理

    问题:求解同余方程组

    其中m1,m2,m3...mk 为两两互质的整数,求x的最小非负整数解.

     

    代码:

    习题:

    洛谷 P3868 [TJOI2009]猜数字【中国剩余定理】

    例题:

    曹冲养猪(信息学奥赛一本通 1634)

    【题目描述】

    自从曹冲搞定了大象以后,曹操就开始琢磨让儿子干些事业,于是派他到中原养猪场养猪,可是曹冲很不高兴,于是在工作中马马虎虎,有一次曹操想知道母猪的数量,于是曹冲想狠狠耍曹操一把。 举个例子,假如有 16 头母猪,如果建了 3个猪圈,剩下 1 头猪就没有地方安家了;如果建造了 5 个猪圈,但是仍然有 1 头猪没有地方去;如果建造了 7 个猪圈,还有 2 头没有地方去。你作为曹总的私人秘书理所当然要将准确的猪数报给曹总,你该怎么办?

    【输入】

    第一行包含一个整数 n,表示建立猪圈的次数; 接下来 n 行,每行两个整数 ai,bi,表示建立了 ai个猪圈,有 bi头猪没有去处。你可以假定 ai,aj 互质。

    【输出】

    输出仅包含一个正整数,即为曹冲至少养猪的数目。

    【输入样例】

    3 3 1 5 1 7 2

    【输出样例】

    16

     


     扩展中国剩余定理

    问题:求解同余方程组

     

    其中m1,m2,m3...mk 为 不一定两两互质的整数,求x的最小非负整数解。

    例题:

    Strange Way to Express Integers(信息学奥赛一本通 1635)

    【题目描述】

    给定 2n个正整数 a1,a2,⋯, an和 m1,m2,⋯,mn ,求一个最小的正整数 x,满足 ∀i∈[1,n],x≡ai (mod mi),或者给出无解。

    【输入】

    多组数据。 每组数据第一行一个整数 n; 接下来 n 行,每行两个整数 mi,ai 。

    【输出】

    对于每组数据,若无解,输出 −1;否则输出一个非负整数,若有多解,输出最小的满足条件的答案。

    【输入样例】

    2 8 7 11 9

    【输出样例】

    31

     


     高次同余方程

    BSGS(Baby Step Giant Step)算法,又称大小步算法,其主要用于解形如

    的高次同余方程中的 x,其核心思想是分块。 当 C为质数时,通过费马小定理

    可知,当x>=C-1时,会出现一个循环节,保证答案 x 若存在,必然有x<C-1  

    因此,当 C 比较小时,可使用暴力,直接令从 0 枚举到 C-1,检验其是否为方程的解,而当 C 比较大时,使用暴力会 TLE,此时可以采用 BSGS 算法来求解 x,其时间复杂度是sqrt(n) 级别的.

    朴素的 BSGS 算法只能处理 C 是质数的情况,扩展的 BSGS 通过同余性质消因子来解决 C 不是质数的情况。

    --->关于“map”,不太清楚的话可以参考这里

    例题:

    计算器(信息学奥赛一本通 1636)

    【题目描述】

    你被要求设计一个计算器完成以下三项任务: 1、给定 y,z,p,计算 y^zmod p 的值; 2、给定 y,z,p,计算满足 x×y≡z (mod p)  的最小非负整数 x; 3、给定 y,z,p,计算满足 y^x≡z (mod p )  的最小非负整数 x。

    【输入】

    输入包含多组数据。 第一行包含两个正整数 T,K分别表示数据组数和询问类型(对于一个测试点内的所有数据,询问类型相同); 以下 T 行每行包含三个正整数 y,z,p描述一个询问。

    【输出】

    对于每个询问,输出一行答案。 对于询问类型 2 和 3,如果不存在满足条件的,则输出 Orz, I cannot find x! ,注意逗号与 I 之间有一个空格。

    【输入样例】

    3 1 2 1 3 2 2 3 2 3 3

    【输出样例】

    2 1 2

    我的博客前面还有同余问题1

  • 相关阅读:
    Java读取Excel文件的几种方法
    PowerDesigner的安装和数据库创建(转载)
    JAVA UUID 生成
    Mysql的“Limit”操作
    实现java 中 list集合中有几十万条数据,每100条为一组取出
    MySQL5中大数据错误:Packet for query is too large (****** > ******). You can change this value on the server by setting the max_allowed_packet' variable.;
    Mybatis 示例之 foreach
    JAVA WEB ------ 文件下载及导出数据到office Execl表格
    8 -- 深入使用Spring -- 4...3 AOP的基本概念
    8 -- 深入使用Spring -- 4...2 使用AspectJ实现AOP
  • 原文地址:https://www.cnblogs.com/ljy-endl/p/11404360.html
Copyright © 2011-2022 走看看