题目描述

现有两组数字,每组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 }



转载于:https://www.cnblogs.com/zhangbuang/p/10338369.html

P3868 [TJOI2009]猜数字(CRT板子)相关推荐

  1. 洛谷 P3868 [TJOI2009]猜数字【中国剩余定理】

    思路 中国剩余定理 + 快速乘 题目要求找到最小的 n ∈ N n\in \N n∈N,满足对于 ∀ i ∈ [ 1 , k ] \forall i\in [1,k] ∀i∈[1,k],有 b i ∣ ...

  2. P3868 [TJOI2009]猜数字

    传送门 中国剩余定理模板题(关于中国剩余定理,我是在这里学的:传送门) 由题可知: n-ai=k*bi  --->  n-ai ≡ 0 (mod bi)  --->  n≡ai (mod ...

  3. [TJOI2009] 猜数字

    传送门:>Here< 题意:中国剩余定理 解题思路 本来想练CRT模板的,就不多说了.结果莫名被最后一个点卡成负数.我开long long了? 原来是要快速乘.蒟蒻从没用过快速乘,因此学习 ...

  4. 【训练题23:中国剩余定理】猜数字 | P3868 [TJOI2009]

    猜数字 | P3868 [TJOI2009] 前置知识 拓欧求逆元:见我的这篇 快速乘 难度 提高+/省选−\color{cyan}提高+/省选-提高+/省选− CRTCRTCRT 的模板题,学到了许 ...

  5. LeetCode简单题之猜数字大小

    题目 猜数字游戏的规则如下: 每轮游戏,我都会从 1 到 n 随机选择一个数字. 请你猜选出的是哪个数字. 如果你猜错了,我会告诉你,你猜测的数字比我选出的数字是大了还是小了. 你可以通过调用一个预先 ...

  6. L1-056 猜数字 (结构体解决)

    L1-056 猜数字 (20 分) 一群人坐在一起,每人猜一个 100 以内的数,谁的数字最接近大家平均数的一半就赢.本题就要求你找出其中的赢家. 输入格式: 输入在第一行给出一个正整数N(≤104) ...

  7. 【青少年编程】【三级】猜数字

    Scratch竞赛交流群已成立(适合6至18周岁的青少年),公众号后台回复[Scratch],即可进入.如果加入了之前的社群不需要重复加入. 微信后台回复"资料下载"可获取以往学习 ...

  8. 【项目展示】一个有点难度的猜数字小游戏(Java编写)

    (声明:本文部分图片来自网络,如有侵权请联系,将第一时间删除或更换图片) 本文目录 1.前言 2.规格说明 3.源代码 4.运行结果 5.感想 1.前言 我在自己的博客里上传了一些本科时编过.最近又改 ...

  9. 与猜数问题有关的游戏C语言,猜数字游戏(C语言版)

    最近在研究算法的问题 貌似这是工作中的一个短板 当然 这跟我从事的工作有关 一般不容易接触太多算法问题 .很多时候接触都是一些CRUD  ! 今天空闲了会 写了一个猜数字的游戏  原理很简单 直接上代 ...

最新文章

  1. 确定有限状态机和非确定有限状态机详解 包含Java实现源码(Nondeterministic finite automata)
  2. LEACH分簇算法实现和能量控制算法实现
  3. Http 协议 常用消息头
  4. c++ websocket客户端_阿里面经WebSocket实时通信
  5. Vscode----热门插件超实用插件汇总(史上最全)
  6. 风变编程python助教_花30天时间,学完了风变编程Python基础语法课
  7. C# DateTime ToString
  8. 初探 C# GPU 通用计算技术
  9. linux怎么安装ros系统,ubuntu14.04安装ROS indigo的详细图解步骤
  10. 1087 有多少不同的值 (20 分)—PAT (Basic Level) Practice (中文)
  11. java线程池一创建就立马有线程了么_Java 线程池二之Executors创建的五种线程池及使用注意...
  12. go定时读取mysql_Windows下MySQL定时备份脚本-Go语言中文社区
  13. matlab安装与下载
  14. python mock server_python学习笔记6--mockserver
  15. RAC修改IP(public/virtual/scan)
  16. 在线ps,修改证件照背景色
  17. 基于 MQTT 通讯一个简单的 Java工程
  18. mysql——关于找不到vrcuntime140.dll与vrcuntime140_1.dll的问题
  19. fopen()函数的整理
  20. 部署yanagishima纪实

热门文章

  1. 2017-11-29 黑盒测试实践(小组作业)小组工作记录
  2. Ueeidor 使用
  3. c#数据结构之集合的实现(数组及链表两种实现)
  4. COMMUNITY SERVER 的架构分析
  5. Windows Workflow Beta2 HOL学习笔记(三):使用IfElse Activity,声明条件和自定义活动...
  6. 怎样查看CMD下exe文件的命令行参数输入格式?
  7. 如何准确估算并发数?
  8. Golang 随机获取本机可用端口
  9. CloudStack管理员文档 - 服务方案
  10. javascript写坦克大战