zoukankan      html  css  js  c++  java
  • 曹冲养猪(CRT

    曹冲养猪

    # 题意

    大小为n的 a和m,m表示猪圈的个数,a表示将猪分到猪圈后剩下的,问最后满足这n个条件的猪的个数的最小值

    其中a两两互质

    # 题解

    CRT求得即可,最后模一下M即可将答案变到[0,M-1]即最小的解

     1 #include<bits/stdc++.h>
     2 #define ll long long
     3 using namespace std;
     4 const int N=2e6;
     5 ll a[N],m[N];
     6 int n;
     7 ll exgcd(ll a,ll b,ll &x,ll &y){
     8     if(!b){
     9         x = 1; y = 0;
    10         return a;
    11     }
    12     ll d=exgcd(b,a%b,y,x);
    13     y-=(a/b)*x;
    14     return d;
    15 }
    16 ll CRT(){
    17     ll M=1;
    18     for(int i=1;i<=n;i++){
    19         M*=m[i];
    20     }
    21     ll res=0;
    22     for(int i=1;i<=n;i++){
    23         ll x,y;
    24         ll tmp=M/m[i];
    25         exgcd(tmp,m[i],x,y);
    26         res=(res+tmp*x*a[i])%M;
    27     }
    28     return ((res+M)%M)%M;
    29 }
    30 int main(){
    31     cin>>n;
    32     for(int i=1;i<=n;i++)
    33         cin>>m[i]>>a[i];
    34     cout<<CRT()<<endl;
    35 
    36 }
  • 相关阅读:
    【leetcode】反转字符串
    【leetcode】反转字符串 II
    053-669
    053-668
    053-667
    053-666
    053-665
    053-664
    053-663
    053-662
  • 原文地址:https://www.cnblogs.com/hhyx/p/12702754.html
Copyright © 2011-2022 走看看