首页 > 其他分享 >中国剩余定理

中国剩余定理

时间:2023-04-30 11:22:31浏览次数:45  
标签:剩余 cnt int 定理 a1 k1 m1 中国 LL

中国剩余定理:

代码实现:

//互质版中国剩余定理(CRT)
#include<iostream>
using namespace std;
typedef long long LL;
const int N=20;
LL a[N], b[N];
int n;
void exgcd(LL a, LL b, LL &x, LL &y)
{
    if (!b) {
        x = 1, y = 0;
       return;
    }
    exgcd(b, a % b, y, x);
    y -= a / b * x;
}
int main()
{
    LL res = 0, cnt = 1;//cnt代表所有模数的乘积
    cin >> n;
    for(int i = 0; i < n; i ++)
    {
         cin >> a[i] >> b[i];
         cnt = cnt * a[i];
    }
    LL x, y;
    for(int i = 0; i < n; i ++)
    {
        LL Mi = cnt / a[i];

        exgcd(Mi, a[i], x, y);//因为模数不一定给到质数 所以我们用拓展欧几里得求逆元
        x = (x < 0? x + a[i] : x);//x即Mi的逆 
       res += b[i] * Mi % cnt * x %cnt;//直接套公式求解
    }
    cout << res % cnt <<" ";
}

中国剩余定理变形:
题目描述:

代码实现:

//不互质版中国剩余定理(拓展中国剩余定理 EXCRT)
#include<iostream>
using namespace std;

typedef long long LL;//数据范围比较大,所以用LL来存储

LL exgcd(LL a,LL b,LL &x,LL &y)
{
    if(!b)
    {
        x=1,y=0;
        return a;
    }
    LL d=exgcd(b,a%b,y,x);
    y-=a/b*x;
    return d;
}

int main()
{
    int n;
    LL a1,m1;
    cin>>n>>a1>>m1;
    LL x=0;
    for(int i=1;i<n;i++)
    {
        LL a2,m2;
        cin>>a2>>m2;
        LL k1,k2;
        LL d=exgcd(a1,a2,k1,k2);
        if((m2-m1)%d)
        {
            x=-1;
            break;
        }
        k1*=(m2-m1)/d;
        //因为此时k1是k1*a1+k2*a2=d的解,所以要乘上(m2-m1)/d的倍数大小
        LL t=abs(a2/d);
        k1=(k1%t+t)%t;
        //数据比较极端,所以只求k的最小正整数解
        m1=k1*a1+m1;
        //m1在被赋值之后的值为当前"x"的值,此时赋值是为了方便下一轮的继续使用
        a1=abs(a1*a2/d);
        //循环结束时a1的值为当前所有的a1,a2,……an中的最小公倍数
    }
    if(x!=-1)
    x=(m1%a1+a1)%a1;
    //当循环结束时,此时的值应该与最小公倍数取模,以求得最小正整数解
    printf("%lld\n",x);
    return 0;
}

 

标签:剩余,cnt,int,定理,a1,k1,m1,中国,LL
From: https://www.cnblogs.com/hxss/p/17365050.html

相关文章

  • 浅谈裴蜀定理
    前置知识扩展欧几里得问题给定$a,b,$设$s=ax+by$,求当$s>$0时,求s的最小值定理$\min(s)=\gcd(a,b)$证明见扩展欧几里得引理给定n个数,分别为$A_1$,$A_2$,$A_3$...$A_n$任取n个数,分别为$X_1$,$X_2$,$X_3$...$X_n$设$s=\sum_{i=1}^NA_i*X_i$使$s>0且使s$......
  • 采样定理
    信号\(x(t)\)的频谱为\(X(\mathrm{j}\omega)\)。对信号使用周期单位冲激串采样得到采样信号\(x_p(t)\):\[x_p(t)=x(t)p(t)\]其中,\(p(t)\)为采样函数,是周期为\(T\)的周期单位冲激串,并且\(p(t)\)的基波频率\(\omega_s=\frac{2\pi}{T}\)。采样函数如下:\[p(t)=\sum_{......
  • 百胜中国(YUMC):创新不止,成长不息
    万亿餐饮市场细分赛道有差异,品类标准化程度影响品牌扩张难度。我国餐饮行业总体规模4万亿以上,市场整体呈现“容量巨大、品类众多”的特点。其中我们看到不同品类对人的依赖程度不一,天生的标准化程度也不一样,这会较大程度影响餐饮品牌的扩张确定性。过往研究餐饮企业的过程中,我们看......
  • 中国剩余定理(CRT)学习笔记
    约定\(A\perpB\)表示\(\gcd(A,B)=1\)。\(A\midB\)表示\(B\equiv0\pmod{A}(A\neq0)\)。引入考虑以下这道题:有物不知其數,三三數之剩二,五五數之剩三,七七數之剩二。問物幾何?——《孫子算經》也就是说,求出下列关于\(x\)方程组的最小整数解:\[\begin{cases}x\equi......
  • 数字中国建设2522整体框架
    2023年2月,中共中央、国务院印发《数字中国建设整体布局规划》,数字中国建设有了里程碑意义的顶层设计和整体谋划。作为党的二十大后我国信息化领域的首个全面规划,文件着眼党和国家事业发展全局,首次提出新时代数字中国建设的整体布局,将建设数字中国上升到“是数字时代推进中国式现代......
  • 数字中国|闪捷信息受邀出席,全栈数据安全能力广受关注
    4月27日,由国家网信办、国家发改委、工信部、福建省人民政府主办的第六届数字中国建设峰会在中国福州举办。该峰会旨在通过政策发布、经验交流、成果展示等方式,推动交流互鉴,促进开放合作。闪捷信息受邀出席本届峰会发表主题演讲,全面展示全栈数据安全技术与服务能力。 01主题展区本......
  • 谈剑峰:把信息安全核心技术掌握在中国人自己手中
    http://www.rmzxb.com.cn/c/2017-06-01/1567122.shtml?n2m=1 谈剑锋,高级工程师[88],无党派人士[87]。第十三届全国政协委员[10]、第十三届上海市政协常委[30][34],第五空间信息科技研究院院长[15],上海市信息安全行业协会名誉会长[10],是信息安全及数据安全领域资深......
  • 中国软件行业的恶性循环
    作者:张晓利1、前言本人从事软件行业八年余,此文仅记载近年本人对软件行业的思考和理解,题目中国软件行业可能有些大,叙述的事情涉及的项目仅在百万级别或十万级别可能非常小,站的角度在100人以内企业规模可能视野非常狭窄,但记录和反映的绝对是软件行业第一线的事实,考虑到我国软件......
  • AntDB数据库再获奖,亚信安慧被评为“2022PostgreSQL中国最佳创新企业”
    “中国PostgreSQL数据库生态大会”由中国开源软件推进联盟PostgreSQL分会&中科院软件所&CSDN联合举办,旨在引入更多技术资源、人才资源及校企合作资源,推进PostgreSQL在各行业和区域的推广与应用能力。本次榜单评选表彰了对PostgreSQL中国生态起到重大推动与贡献作用的企业与技术专家......
  • 第二届应用力学与工程结构国际学术会议(AMES 2023) 2023年6月30日-7月2日 中国大理
    第二届应用力学与工程结构国际学术会议(AMES2023)2023年6月30日-7月2日     中国大理 一、大会简介大会官网:https://ais.cn/u/Yfiiaa由河南大学、朴茨茅斯大学和马来西亚理工大学联合组织的第二届应用力学与工程结构国际学术会议(AMES2023)将于2023年6月30日至7月2日在中......