题目:给你一张N*M的表,表中(i,j)的值为gcd(i,j),再给你一个长度为K的数组a[i],问这个数组是否与表中某一行的一段完全重合
思路:最小可能出现的行一定是LCM(a[0],a[1],...,a[K]),然后假设为第x列为开始位置
x=0%a[0]
x+1=0%a[1]
...
x+K-1=0%a[K-1]
发现没,这就是同余方程组,然后求出最小的非负整数解,然后把这个解代入,看gcd是不是和数组a完全重合
代码:
#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<list>
#include<numeric>
using namespace std;
#define LL long long
#define ULL unsigned long long
#define INF 0x3f3f3f3f
#define mm(a,b) memset(a,b,sizeof(a))
#define PP puts("*********************");
template<class T> T f_abs(T a){ return a