整理的算法模板合集: ACM模板

点我看算法全家桶系列!!!

实际上是一个全新的精炼模板整合计划


CF338D GCD Table(拓展中国剩余定理,细节处理,2900分)

Problem

有一张 n×mn\times mn×m 的表格 GGG,第 iii 行第 jjj 列的元素是 G(i,j)=gcd⁡(i,j)G(i,j)=\gcd(i,j)G(i,j)=gcd(i,j) 。给定一个长度为 kkk 的序列 aia_iai​ ,询问是否存在 x,yx,yx,y,满足 ∀i,1≤i≤k,G(x,y+i−1)=gcd⁡(x,y+i−1)=ai\forall i,1\le i\le k,G(x,y+i-1)=\gcd(x,y+i-1)=a_i∀i,1≤i≤k,G(x,y+i−1)=gcd(x,y+i−1)=ai​ (即问是否有在表格范围内的解 (x,y)(x,y)(x,y) )。

数据范围:1≤n,m≤1012,1≤k≤104,1≤ai≤10121\le n,m\le 10^{12},1\le k\le 10^4,1\le a_i\le 10^{12}1≤n,m≤1012,1≤k≤104,1≤ai​≤1012

Solution

根据题意显然可以列出:

{gcd⁡(x,y+1−1)=a1gcd⁡(x,y+2−1)=a2⋯gcd⁡(x,y+k−1)=ak\left\{ \begin{aligned} \gcd(x,y+1-1) & = & a_1 \\ \gcd(x,y+2-1) & = & a_2 \\ \cdots\\ \gcd(x,y+k-1)& = & a_k \end{aligned} \right. ⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧​gcd(x,y+1−1)gcd(x,y+2−1)⋯gcd(x,y+k−1)​===​a1​a2​ak​​

我们知道 gcd⁡(a,b)=c\gcd(a,b) =cgcd(a,b)=c,经典套路,显然有:a=k1c,b=k2c,k1∤k2a=k_1c,b=k_2c,k_1\nmid k_2a=k1​c,b=k2​c,k1​∤k2​

即:
a∣c,b∣c⇒x∣ai,y+i−1∣aia\mid c,b\mid c\Rightarrow x\mid a_i,y+i-1\mid a_i a∣c,b∣c⇒x∣ai​,y+i−1∣ai​

即:

x≡0modaiy≡(1−i)modai\begin{aligned}&x\equiv0 \bmod a_i&\\&y\equiv(1-i)\bmod a_i\end{aligned} ​x≡0modai​y≡(1−i)modai​​

所以我们可以列出一个同余方程组:

{y≡(1−1)moda1y≡(1−2)moda2⋯y≡(1−k)modak\left\{ \begin{aligned}&y\equiv(1-1)\bmod a_1&\\&y\equiv(1-2)\bmod a_2\\&\ \ \ \ \ \ \ \ \ \ \ \ \ \ \cdots&\\&y\equiv(1-k)\bmod a_k\end{aligned} \right. ⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧​​y≡(1−1)moda1​y≡(1−2)moda2​              ⋯y≡(1−k)modak​​​

显然 aia_iai​ 不一定是质数,所以我们直接使用拓展中国剩余定理求解即可,这样我们就可以求出一个合法的 yyy。

那么如何求出最小的(不容易越界)且合法的 xxx 呢,显然 xxx 可以整除所有的 aia_iai​,那么满足条件的最小的 xxx 显然是 lcm{ai}\text{lcm}\{ a_{i} \}lcm{ai​}。

求出 x,yx,yx,y 以后验证一下开头列出来的 gcd⁡\gcdgcd 是否完全相同,以及 G(x,y+i−1)G(x,y+i-1)G(x,y+i−1) 中的 (x,y+i−1)(x,y+i-1)(x,y+i−1) 是否在 GGG 函数的定义域内即可。(我们只需要判断 x,y+i−1,y+k−1x,y+i-1,y+k-1x,y+i−1,y+k−1 是否越界即可)

Hint

  • 这里如果给定的模数均为 111 的话,直接用 excrt 板子求出来的是 000 ,此时应该是答案取任意值均可,但是这里如果答案取 000 的话 y<1y<1y<1 会判负,实际上是有解的,所以这里要特判一下。

  • 龟速乘的时候,如果乘的是负数的话需要 a,ba,ba,b 同时取反,否则会死循环hhh

Code

// Problem: D. GCD Table
// Contest: Codeforces - Codeforces Round #196 (Div. 1)
// URL: https://codeforces.com/problemset/problem/338/D
// Memory Limit: 256 MB
// Time Limit: 1000 ms
//
// Powered by CP Editor (https://cpeditor.org)#include <bits/stdc++.h>
#define int long long
using namespace std;
using ll = long long;
const int N = 1e4 + 7;int n, m, k, t;
int a[N], LCM;
int ai[N], bi[N];template <typename T> inline void read(T& t) {int f = 0, c = getchar(); t = 0; while (!isdigit(c)) f |= c == '-', c = getchar();while (isdigit(c)) t = t * 10 + c - 48, c = getchar();if (f) t = -t;
}template <typename T> void print(T x) {if (x < 0) x = -x, putchar('-');if (x > 9) print(x / 10);putchar(x % 10 + 48);
} int gcd(int a, int b)
{if(b == 0) return a;return gcd(b, a % b);
}int lcm(int a, int b)
{return a / gcd(a, b) * b;
}int exgcd(int a, int b, int &x, int &y)
{if(b == 0) {x = 1, y = 0;return a;}int d = exgcd(b, a % b, x, y);int z = x;x = y, y = z - a / b * y; return d;
}int mul(int a, int b, int c)
{if(b < 0) a = - a, b = - b;int res = 0;while(b) {if(b & 1) res = (res + a) % c;a = (a + a) % c;b >>= 1;}return res;
}ll excrt(int n)
{ll x, y, k;ll M = bi[1], ans = ai[1];for(int i = 2; i <= n; ++ i) {ll a = M, b = bi[i], c = (ai[i] - ans % b + b) % b;ll d = exgcd(a, b, x, y);ll bg = b / d;if(c % d != 0) return -1;x = mul(x, c / d, bg);ans += x * M;M *= bg;ans = (ans % M + M) % M;} ans = (ans % M + M) % M;if(ans == 0) ans = M;//ans = 1;return ans;
}signed main()
{LCM = 1;read(n), read(m), read(k);for(int i = 1; i <= k; ++ i) {read(a[i]);LCM = lcm(LCM, a[i]);}if(k > m) return puts("NO"), 0;for(int i = 1; i <= k; ++ i) {bi[i] = a[i];ai[i] = (1 - i + a[i]) % a[i];}int x = LCM, y = excrt(k); if(y == -1) return puts("NO"), 0;for(int i = 1; i <= k; ++ i) {if(gcd(x, y + i - 1) != a[i]) return puts("NO"), 0;}     if(y < 1 || x < 1 || y + k - 1 > m || x > n) return puts("NO"), 0;return puts("YES"), 0;
}

CF338D GCD Table(拓展中国剩余定理,细节处理,2900分)相关推荐

  1. 中国剩余定理学习 拓展中国剩余定理

    中国剩余定理学习 && 拓展中国剩余定理 中国剩余定理: 拓展中国剩余定理: 中国剩余定理: 仅供自己复习时查看一下大佬笔记,详细学习过程在大佬的博客. 学习连接:https://ww ...

  2. ACM数论----中国剩余定理与拓展中国剩余定理

    一.问题引入: 在<孙子算经>中有这样一个问题:"今有物不知其数,三三数之剩二(除以3余2),五五数之剩三(除以5余3),七七数之剩二(除以7余2),问物几何?"这个问 ...

  3. 中国剩余定理拓展中国剩余定理

    复习 中国剩余定理: x ≡ a 1 ( m o d m 1 ) x ≡a_1(mod m_1) x≡a1​(modm1​) x ≡ a 2 ( m o d m 2 ) x ≡a_2(mod m_2) ...

  4. 【原创】 中国剩余定理 和 拓展中国剩余定理

    孙子 Preface 数论学习Part 7. 每天进步一点点,退役不会太丢脸. 联赛只剩十五天,隔靴搔痒智何添? 剩余定理四天一篇,动归图论又几何,数据结构似云烟. 莫再等闲,莫忘时间. CRT 我们 ...

  5. 数学:拓展中国剩余定理

    拓展中国剩余定理解决模数不互质同余方程组 如果模数互质的话,直接中国剩余定理就可以了 但是如果模数不互质又没有接触这个方法就凉凉了 推是很不好推出来的 假设我们这里有两个方程: x=a1∗x1+b1 ...

  6. [数论]拓展中国剩余定理

    拓展中国剩余定理 •拓展中国剩余定理 拓展中国剩余定理是用来解同余方程 $\begin{cases}x\equiv c_{1}\left( mod\ m_{1}\right) \\ x\equiv c ...

  7. poj 1006 java_POJ 1006 Java:中国剩余定理

    题目描述: 人生来就有三个生理周期,分别为体力.感情和智力周期,它们的周期长度为23天.28天和33天.每一个周期中有一天是高峰.在高峰这天,人会在相应的方面表现出色.例如,智力周期的高峰,人会思维敏 ...

  8. 密码学基础算法(二)中国剩余定理

    随便谷歌了一个图片做首图 原图地址: http://www.siwapu.com/etagid41968b0/ 密码学基础系列: (一) 基于整数的欧几里得算法和扩展欧几里得算法 (二) 中国剩余定理 ...

  9. 与数论的厮守04:扩展中国剩余定理

    根据数论的尿性,一般的定理解决不了的问题怎么办?那就拓展一下呗. 我们先看中国剩余定理,它解决的是一堆同余方程:nΞa1(mod b1),nΞa2(mod b2)...nΞak(mod bk),其中b ...

最新文章

  1. 【python】组合搜索
  2. hystrix 单独使用_使用Hystrix对Dubbo消费者提供线程隔离保护
  3. 三星s9php禁用列表,ADB禁用列表
  4. MySQL 基本信息的查询(初始化配置信息 my.ini)
  5. 员工离职困扰?来看AI如何解决,基于人力资源分析的 ML 模型构建全方案 ⛵
  6. wilcoxon符号秩检验matlab,符号检验和wilcoxon符号秩检验的区别
  7. JDK自带javap命令反编译class文件和Jad反编译class文件(推荐使用jad)
  8. TongWeb卡、TongWeb卡、TongWeb卡卡卡
  9. pycharm报错: with exit code -1073740791 (0xC0000409)
  10. 使用NLTK对英文文章分句,避免缩略词标点符号干扰
  11. 2021年11月23日对自己的一次鼓励
  12. 阿里云Linux服务器部署JDK8实战教程
  13. docker portainer agent 安装
  14. VB中使用DirectX库的简明教程(3)
  15. 如何获取三维标签的轮廓表示
  16. 智能电饭煲设计(文档+仿真源文件)
  17. 上海房屋租赁价格数据(11月24日)
  18. Excel VBA高效办公应用-第十六章-VBA高效文件操作(同时给多个工作簿加解密)
  19. 增长黑客:如何绘制用户的旅程?
  20. Innodb MRR优化

热门文章

  1. 使用OpenCV4实现硬件级别加速
  2. Java报表工具FineReport导出EXCEL的四种API
  3. day12-mysql 增删改查
  4. 基于开源、混合云 惠普Helion开年3款新品发布
  5. HDFS-Shell
  6. 测试一下StringBuffer和StringBuilder及字面常量拼接三种字符串的效率
  7. asp.net C# 实现微信接口权限开发类
  8. PhalGo-Request
  9. javascript --- 事件托付
  10. c++成员函数的调用