【题目描述】

有一张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]即可

 /*************
CF#338D
by chty
2016.11.3
*************/
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<ctime>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long ll;
ll n,m1,K,A,M,ans,lcm(),m[],a[];
inline ll read()
{
ll x=,f=; char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-; ch=getchar();}
while(isdigit(ch)) {x=x*+ch-''; ch=getchar();}
return x*f;
}
ll gcd(ll a,ll b) {return !b?a:gcd(b,a%b);}
void exgcd(ll a,ll b,ll &g,ll &x,ll &y)
{
if(b==) {x=; y=; g=a; return;}
exgcd(b,a%b,g,x,y);
ll t=x;x=y;y=t-a/b*y;
}
ll China()
{
for(ll i=;i<=K;i++) a[i]=-i;
A=a[],M=m[];
for(ll i=;i<=K;i++)
{
ll k,y,da=a[i]-A,g;
exgcd(M,m[i],g,k,y);
if(da%g) return -;
ll t=m[i]/g;
k*=da/g;
k=(k%t+t)%t;
A+=k*M;
M=M*m[i]/g;
A=(A+M)%M;
}
return A;
}
bool check()
{
if(lcm>n) return ;
ll ans=China();
if(ans<) return ;
if(ans==) ans=lcm;
if(ans+K->m1) return ;
for(ll i=;i<=K;i++) if(gcd(lcm,ans+i-)!=m[i]) return ;
return ;
}
int main()
{
//freopen("cin.in","r",stdin);
//freopen("cout.out","w",stdout);
n=read(); m1=read(); K=read();
for(ll i=;i<=K;i++) m[i]=read();
for(ll i=;i<=K;i++)
{
lcm=lcm/gcd(lcm,m[i])*m[i];
if(lcm>n) break;
}
check()?puts("YES"):puts("NO");
return ;
}

【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. for-in 的坑

    for-in 循环的下标为字符串,不是数字 var ar=[13,2,13,14]; function isSort(ar){ for(var i in ar){ console.log(i+':'+ ...

  2. HelloWorld 模块

    helloworld.c 代码 #include <linux/init.h> #include <linux/module.h> MODULE_LICENSE("D ...

  3. volatile 续

    上次的问题在看了一篇博客后有了点理解了 博文地址为 http://www.cnblogs.com/dolphin0520/p/3920373.html 按照文章中写的,在并发编程中,我们通常会遇到以下 ...

  4. HDU - 6433: H. Pow (简答题,输出大数)

    There are n numbers 3^0, 3^1, . . . , 3^n-1. Each time you can choose a subset of them (may be empty ...

  5. 关于 avalon总线理解(整理)

    1,一个基于Avalon接口的系统会包含很多功能模块,这些功能模块就是Avalon存储器映射外设,通常简称Avalon外设.所谓存储器映射外设是指外设和存储器使用相同的总线来寻址,并且CPU使用访问存 ...

  6. 对Tornado异步操作Sqlalchemy方法的选定 不错

    使用原因 在一个实时通讯的项目中,由于需要使用Websocket这一协议,便在Python框架中选定了Tornado,也同时使用了Sqlalchemy这一ORM框架. 大家都知道Tornado有异步非 ...

  7. 1020. Tree Traversals (25) ——树的遍历

    //题目 通过后续遍历 中序遍历 得出一棵树 ,然后按树的层次遍历打印 PS:以前对于这种用指针的题目是比较头痛的,现在做了一些链表操作后,感觉也不难 先通过后续中序建一棵树,然后通过BFS遍历这棵树 ...

  8. java md5 函数

    private static final String md5(final String s) { final String MD5 = "MD5"; try { // Creat ...

  9. laravel 网站速率优化

    https://segmentfault.com/a/1190000009954966

  10. Java-Runoob:Java 变量类型

    ylbtech-Java-Runoob:Java 变量类型 1.返回顶部 1. Java 变量类型 在Java语言中,所有的变量在使用前必须声明.声明变量的基本格式如下: type identifie ...