zoukankan      html  css  js  c++  java
  • 1079 中国剩余定理

    1079 中国剩余定理

    例如,K % 2 = 1, K % 3 = 2, K % 5 = 3,可以先令一个值等于5+3,然后依次加五直到8求余等于2时,在依次加15直到23求余2等于1,就求出答案了。

     1 #include <iostream>
     2 #include <algorithm>
     3 #include <stdio.h>
     4 using namespace std;
     5 struct Nod{
     6     int p,m;
     7 }nod[11];
     8 bool cmp(Nod a, Nod b){
     9     return a.p > b.p;
    10 }
    11 int main(){
    12     int n;
    13     cin>>n;
    14     for(int i = 0; i < n; i ++) cin>>nod[i].p>>nod[i].m;
    15     sort(nod,nod+n,cmp);
    16     int ans = nod[0].m, cnt = 1;
    17     for(int i = 1; i < n; i ++){
    18         cnt = cnt/__gcd(cnt,nod[i-1].p)*nod[i-1].p;
    19         while((ans%nod[i].p) != nod[i].m){
    20             ans+=cnt;
    21         }
    22     }
    23     cout << ans << endl;
    24     return 0;
    25 }

    不过由于每一个p都之间的最大因子都是1,所以就不需要求最大公倍数这么麻烦了。

     1 #include <iostream>
     2 #include <algorithm>
     3 #include <stdio.h>
     4 using namespace std;
     5 struct Nod{
     6     int p,m;
     7 }nod[11];
     8 int main(){
     9     int n;
    10     cin>>n;
    11     for(int i = 0; i < n; i ++) cin>>nod[i].p>>nod[i].m;
    12     int ans = nod[0].m, cnt = 1;
    13     for(int i = 1; i < n; i ++){
    14         cnt = cnt*nod[i-1].p;
    15         while((ans%nod[i].p) != nod[i].m){
    16             ans+=cnt;
    17         }
    18     }
    19     cout << ans << endl;
    20     return 0;
    21 }
  • 相关阅读:
    Assetbundle资源单一打包,以及加载方法
    VS2010 Chromium编译
    一道思考题
    Windbg源码调试
    C++ static_cast dynamic_cast reinterpret_cast const_cast转换
    条件断点设置
    FFmpeg 2.0编译配置
    error LNK2001: 无法解析的外部符号 _IID_IDirectDraw7
    Windbg常用命令
    DDraw绘图
  • 原文地址:https://www.cnblogs.com/xingkongyihao/p/7106896.html
Copyright © 2011-2022 走看看