• P3868 [TJOI2009]猜数字(CRT板子)


    题目描述

    现有两组数字,每组k个,第一组中的数字分别为:a1,a2,...,ak表示,第二组中的数字分别用b1,b2,...,bk表示。其中第二组中的数字是两两互素的。求最小的非负整数n,满足对于任意的i,n - ai能被bi整除。

    输入输出格式

    输入格式:

     

    输入数据的第一行是一个整数k,(1 ≤ k ≤ 10)。接下来有两行,第一行是:a1,a2,...,ak,第二行是b1,b2,...,bk

     

    输出格式:

     

    输出所求的整数n。

     

    输入输出样例

    输入样例#1: 复制
    3
    1 2 3
    2 3 5
    
    输出样例#1: 复制
    23

    说明

    所有数据中,第一组数字的绝对值不超过109(可能为负数),第二组数字均为不超过6000的正整数,且第二组里所有数的乘积不超过1018

    每个测试点时限1秒

    注意:对于C/C++语言,对64位整型数应声明为long long,如使用scanf, printf函数(以及fscanf, fprintf等),应采用%lld标识符。





    像第一对a和b    , 首先其他a的最小公倍数才能满足其他的式子,求在这个最小公倍数的逆元在成a,有满足了自己成立,这里就用到了一个小技巧。

    这样满足了所有的式子成立,在%lcm扔成立

     1 #include"bits/stdc++.h"
     2 using namespace std;
     3 typedef long long ll;
     4 
     5 ll k,a[11],b[11],s=1,ans=0;
     6 
     7 
     8 void exgcd(ll a,ll b,ll &x, ll &y)
     9 {
    10     if (!b){
    11         x=1,y=0 ;return ;
    12     }
    13     
    14     exgcd(b,a%b,x,y); ll t;
    15     t=x;
    16     x=y;
    17     y=t-(a/b)*y;
    18 }
    19 
    20 inline ll mul(ll a,ll b)
    21 {
    22     ll r=0;
    23     while (b)
    24     {
    25         if (b&1)r+=a%=s;
    26         b>>=1;
    27         a+=a%=s;
    28     }return r;
    29 }
    30 int main()
    31 {
    32     cin>>k;
    33     for (int i=1;i<=k;i++)cin>>a[i];
    34     for (int i=1;i<=k;i++)cin>>b[i],s*=b[i];
    35     for(int i=1;i<=k;i++)
    36     {
    37         ll x,y;
    38         exgcd(s/b[i],b[i],x,y);
    39         x=(x%b[i]+b[i])%b[i];(1)
    40     //     cout<<i<<" "<<x<<endl;
    41         ans+=mul(s/b[i]*x,((a[i]%b[i]+b[i])%b[i]));//快速乘,否则爆long long(2)
    // 一和二式都取模意义下的最小正整数
    42 ans%=s; 43 } 44 cout<<ans; 45 }


  • 相关阅读:
    轮播图2
    点击按钮切换轮播图
    轮播图
    2016.5.5_十进制转二进制【ABAP】
    2016.4.26_longtext长文本【ABAP】
    2016.4.26_动态内表【ABAP】
    2016.4.26_下载abap代码【ABAP】
    2016.4.15_debug小技巧【ABAP】
    2016.4.1_js向controller传数据【笔记】
    2016.3.21_TABLE CONTROL【ABAP】
  • 原文地址:https://www.cnblogs.com/zhangbuang/p/10338369.html
Copyright © 2020-2023  润新知