中国剩余定理 互质与非互质版本

中国剩余定理互质版

设m1,m2,m3,...,mk是两两互素的正整数,即gcd(mi,mj)=1,i!=j,i,j=1,2,3,...,k.

则同余方程组:

x = a1 (mod n1)

x = a2 (mod n2)

...

x = ak (mod nk)

模[n1,n2,...nk]有唯一解,即在[n1,n2,...,nk]的意义下,存在唯一的x,满足:

x = ai mod [n1,n2,...,nk], i=1,2,3,...,k。

解可以写为这种形式:

x = sigma(ai* mi*mi‘) mod(N)

      其中N=n1*n2*...*nk,mi=N/ni,mi‘为mi在模ni乘法下的逆元。

例题 codevs 3990 中国余数定理2

/*
作者:Best
题目:p3990 中国余数定理 2
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
using namespace std;
ll n,l,r,b[11],m[11],M[11],Mi[11],s=1,ans,sum,x,y;
void E_gcd(ll a,ll b)
{
    if(!b){x=1;y=0;return;}
    E_gcd(b,a%b);int tmp=x;x=y;y=tmp-a/b*y;
}
int main()
{
    cin>>n>>l>>r;
    for(int i=1;i<=n;i++)
      cin>>m[i]>>b[i],s*=m[i];
    for(int i=1;i<=n;i++)
      M[i]=s/m[i];
    for(int i=1;i<=n;i++)
      {
          x=y=0;
          E_gcd(M[i],m[i]);
          Mi[i]=(x+m[i])%m[i];
      }
    for(int i=1;i<=n;i++)
      ans=(ans+M[i]*Mi[i]%s*b[i])%s;
    if(ans<l||ans>r)ans=sum=0;
    else sum=(r-ans)/s+1;
    cout<<sum<<endl<<ans;
    return 0;
}

中国剩余定理非互质版

例题 HUD 1573 X问题

#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
using namespace std;
ll T,n,m,a[11],b[11],x,y,gcd;
void E_gcd(ll ai,ll bi)
{
    if(!bi){x=1;y=0;gcd=ai;return;}
    E_gcd(bi,ai%bi);
    ll tmp=x;x=y;y=tmp-ai/bi*y;
}
int main()
{
    cin>>T;
    while(T--)
      {
          cin>>n>>m;
          for(int i=1;i<=m;i++)cin>>a[i];
          for(int i=1;i<=m;i++)cin>>b[i];
          int falg=0;ll a1=a[1],b1=b[1];
          for(int i=2;i<=m;i++)
            {
                ll a2=a[i],b2=b[i];E_gcd(a1,a2);
                if((b2-b1)%gcd){falg=1;break;}
                x*=((b2-b1)/gcd);ll t=a2/gcd;
                x=(x%t+t)%t;b1+=a1*x;
                a1=(a1*a2/gcd);b1=(b1%a1+a1)%a1;
          }
        if(falg||b1>n)cout<<"0"<<endl;
        else cout<<(n-b1)/a1+1-(!b1?1:0)<<endl;
      }
}
时间: 2024-12-05 22:03:56

中国剩余定理 互质与非互质版本的相关文章

中国剩余定理小结 (互质,非互质) (poj 1006,hdu 3579)

先证明下中国剩余定理 条件: x%m_1=a_1 x%m_2=a_2 ... x%m_n=a_n m_1,m_2,...,m_n两两互质 证明: 设M=m_1*m_2*m_3*...*m_n M_i=M/m_i 因为gcd(M_i,m_i)=1,所以M_ix+m_iy=1 (t_i*M_i)%m_i=1 //由Ext_gcd(M_i,m_i,x,y)求出,t_i=x 方程组的解:x=a_1*t_1*M_1+...+a_n*t_n*M_n 题目:poj 1006 http://poj.org/pr

BestCoder Round #80 1004 hdu 5668 中国剩余定理(m不互质版)

链接:戳这里 Circle Time Limit: 2000/1000 MS (Java/Others)   Memory Limit: 65536/65536 K (Java/Others) 问题描述 \ \ \ \     Fye对约瑟夫游戏十分着迷. \ \ \ \     她找到了n个同学,把他们围成一个圈,让他们做约瑟夫游戏,然后她得到了一个同学们出圈的编号序列.游戏是这样进行的:以同学1为起点,开始计数,计数到第k个同学,该同学出圈.出圈的同学将不参与之后的计数. \ \ \ \  

中国剩余定理学习笔记

先看一道poj上的题目:[poj1006] Biorhythms 题意: 人自出生起就有体力,情感和智力三个生理周期,分别为23,28和33天.一个周期内有一天为峰值,在这一天,人在对应的方面(体力,情感或智力)表现最好.通常这三个周期的峰值不会是同一天.现在给出三个日期,分别对应于体力,情感,智力出现峰值的日期.然后再给出一个起始日期,要求从这一天开始,算出最少再过多少天后三个峰值同时出现. 分析: 首先我们要知道,任意两个峰值之间一定相距整数倍的周期.假设一年的第N天达到峰值,则下次达到峰值

POJ 2891 中国剩余定理的非互质形式

中国剩余定理的非互质形式 任意n个表达式一对对处理,故只需处理两个表达式. x = a(mod m) x = b(mod n) km+a = b (mod n) km = (a-b)(mod n) 利用扩展欧几里得算法求出k k = k0(mod n/(n,m)) = k0 + h*n/(n,m) x = km+a = k0*m+a+h*n*m/(n,m) = k0*m+a (mod n*m/(n,m)) #include <cstdio> #include <cstring> #

hdu 1573 X问题 (非互质的中国剩余定理)

X问题 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2980    Accepted Submission(s): 942 Problem Description 求在小于等于N的正整数中有多少个X满足:X mod a[0] = b[0], X mod a[1] = b[1], X mod a[2] = b[2], …, X mod

poj 2891 Strange Way to Express Integers (非互质的中国剩余定理)

Strange Way to Express Integers Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 9472   Accepted: 2873 Description Elina is reading a book written by Rujia Liu, which introduces a strange way to express non-negative integers. The way is

Chinese remainder theorem again(中国剩余定理+不互质版+hud1788)

Chinese remainder theorem again Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 1788 Appoint description:  System Crawler  (2015-04-27) Description 我知道部分同学最近在看中国剩余定理,就这个定理本身,还是比较简单的: 假设m1,m2,-,m

Hello Kiki(中国剩余定理——不互质的情况)

Hello Kiki Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 247 Accepted Submission(s): 107   Problem Description One day I was shopping in the supermarket. There was a cashier counting coins serio

poj 2981 Strange Way to Express Integers (中国剩余定理不互质)

http://poj.org/problem?id=2891 Strange Way to Express Integers Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 11970   Accepted: 3788 Description Elina is reading a book written by Rujia Liu, which introduces a strange way to express no