【题目描述】

有一张N,M<=10^12的表格,i行j列的元素是gcd(i,j)

读入一个长度不超过10^4,元素不超过10^12的序列a[1..k],问是否在某一行中出现过

【题解】

要保证gcd(x,y)=a[i],显然x=lcm(a[1],a[2]……a[k])

然后y%a[1]=0,即(y+i-1)%a[i]=0

即y%a[1]=0

y%a[2]=-1

……

y%a[n]=-(n-1)

这就转化为了中国剩余定理

求出y之后,只需验证gcd(x,y+i-1)=a[i]即可

  1. /*************
  2. CF#338D
  3. by chty
  4. 2016.11.3
  5. *************/
  6. #include<iostream>
  7. #include<cstdio>
  8. #include<cstdlib>
  9. #include<cstring>
  10. #include<ctime>
  11. #include<cmath>
  12. #include<algorithm>
  13. using namespace std;
  14. typedef long long ll;
  15. ll n,m1,K,A,M,ans,lcm(),m[],a[];
  16. inline ll read()
  17. {
  18. ll x=,f=; char ch=getchar();
  19. while(!isdigit(ch)) {if(ch=='-') f=-; ch=getchar();}
  20. while(isdigit(ch)) {x=x*+ch-''; ch=getchar();}
  21. return x*f;
  22. }
  23. ll gcd(ll a,ll b) {return !b?a:gcd(b,a%b);}
  24. void exgcd(ll a,ll b,ll &g,ll &x,ll &y)
  25. {
  26. if(b==) {x=; y=; g=a; return;}
  27. exgcd(b,a%b,g,x,y);
  28. ll t=x;x=y;y=t-a/b*y;
  29. }
  30. ll China()
  31. {
  32. for(ll i=;i<=K;i++) a[i]=-i;
  33. A=a[],M=m[];
  34. for(ll i=;i<=K;i++)
  35. {
  36. ll k,y,da=a[i]-A,g;
  37. exgcd(M,m[i],g,k,y);
  38. if(da%g) return -;
  39. ll t=m[i]/g;
  40. k*=da/g;
  41. k=(k%t+t)%t;
  42. A+=k*M;
  43. M=M*m[i]/g;
  44. A=(A+M)%M;
  45. }
  46. return A;
  47. }
  48. bool check()
  49. {
  50. if(lcm>n) return ;
  51. ll ans=China();
  52. if(ans<) return ;
  53. if(ans==) ans=lcm;
  54. if(ans+K->m1) return ;
  55. for(ll i=;i<=K;i++) if(gcd(lcm,ans+i-)!=m[i]) return ;
  56. return ;
  57. }
  58. int main()
  59. {
  60. //freopen("cin.in","r",stdin);
  61. //freopen("cout.out","w",stdout);
  62. n=read(); m1=read(); K=read();
  63. for(ll i=;i<=K;i++) m[i]=read();
  64. for(ll i=;i<=K;i++)
  65. {
  66. lcm=lcm/gcd(lcm,m[i])*m[i];
  67. if(lcm>n) break;
  68. }
  69. check()?puts("YES"):puts("NO");
  70. return ;
  71. }

【CF#338D】GCD Table的更多相关文章

  1. 【Codeforces 582A】 GCD Table

    [题目链接] 点击打开链接 [算法] G中最大的数一定也是a中最大的数.          G中次大的数一定也是a中次大的数. 第三.第四可能是由最大和次大的gcd产生的 那么就不难想到下面的算法: ...

  2. 【Codeforces 582A】GCD Table

    [链接] 我是链接,点我呀:) [题意] 给你一个数组A[]经过a[i][j] = gcd(A[i],A[j])的规则生成的二维数组 让你求出原数组A [题解] 我们假设原数组是A 然后让A数组满足A ...

  3. 【laravel5.4】DB::table的操作

    基于laravel5.4版本的查询构造器的简单几个操作:(相对于TP3.2版本) //获取指定多行多列,二维,,对象 [select] $names = ''; $names = DB::table( ...

  4. 【CF#303D】Rotatable Number

    [题目描述] Bike是一位机智的少年,非常喜欢数学.他受到142857的启发,发明了一种叫做“循环数”的数. 如你所见,142857是一个神奇的数字,因为它的所有循环排列能由它乘以1,2,...,6 ...

  5. 【BZOJ 2818】 GCD

    [题目链接] 点击打开链接 [算法] 线性筛出不大于N的所有素数,枚举gcd(x,y)(设为p),问题转化为求(x,y)=p的个数          设x=x'p, y=y'p,那么有(x,y)=1且 ...

  6. 【HDU 5382】 GCD?LCM! (数论、积性函数)

    GCD?LCM! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total ...

  7. 【CF 585E】 E. Present for Vitalik the Philatelist

    E. Present for Vitalik the Philatelist time limit per test 5 seconds memory limit per test 256 megab ...

  8. 【CF 463F】Escape Through Leaf

    题意 给你一棵 \(n\) 个点的树,每个节点有两个权值 \(a_i,b_i\). 从一个点 \(u\) 可以跳到以其为根的子树内的任意一点 \(v\)(不能跳到 \(u\) 自己),代价是 \(a_ ...

  9. 【CF 453A】 A. Little Pony and Expected Maximum(期望、快速幂)

    A. Little Pony and Expected Maximum time limit per test 1 second memory limit per test 256 megabytes ...

随机推荐

  1. SBT构建工具

    SBT Simple Build Tool. A interactive build tool. install windows可直接到http://www.scala-sbt.org/0.13/do ...

  2. TCP服务器端口数,最大连接数以及MaxUserPort的关系辨真

    原文连接:http://www.jianshu.com/p/4a58761d758f 关于TCP服务器最大并发连接数有一种误解就是"因为端口号上限为65535,所以TCP服务器理论上的可承载 ...

  3. [置顶] 个人博客上线!欢迎来访~ http://onlyloveyd.cn/

    简介 Hexo + Github + 个人域名 构建静态博客系统. 构建方法 参考 https://yq.aliyun.com/articles/64953 个人博客网站 Cherish Androi ...

  4. Django 之Ajax

    必备知识:json 什么是json 定义 JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式. 它基于 ECMAScript (w3c制定的 ...

  5. (十一)java循环结构

    while(循环的条件) {循环的语句} int a = 1; while(a < 5) { System.out.println(a);//1,2,3,4 a++; } System.out. ...

  6. 【ACM非算法部分】scanf()函数

    scanf函数 格式说明符: %c    字符型 %d    十进制数 %i     读入十进制,八进制,十六进制数.输入的时候正常是十进制数,若输入0前缀的数将读入八进制,0x前缀读入16进制.若输 ...

  7. 转发一篇关于django模型详解的一篇好的博客

    http://blog.csdn.net/pipisorry/article/details/45725953

  8. Flyway客户端使用

    一.flyway介绍 Flyway是一款开源的数据库版本管理工具,它更倾向于规约优于配置的方式.Flyway可以独立于应用实现管理并跟踪数据库变更,支持数据库版本自动升级,并且有一套默认的规约,不需要 ...

  9. 利用脚本启动java程序

    今天在工作中,需要写一个shell脚本,启动一个socket程序,从而模拟短信网关.查了一些资料,终于搞定了,现在记录一下,方便大家查阅. 为了说明使用方法,我们就用最简单的程序来实现,比如我们要运行 ...

  10. delphi 2010安装unidac

    UniDAC是一个功能强大的非可视化跨数据库的数据访问组件,可用于Delphi,Delphi for .NET,C++Builder,and Lazarus (Free Pascal).它提供了对流行 ...