Codeforces Round #360 (Div. 2) D. Remainders Game 中国剩余定理
题目链接:
题目
D. Remainders Game
time limit per test 1 second
memory limit per test 256 megabytes
问题描述
Today Pari and Arya are playing a game called Remainders.
Pari chooses two positive integer x and k, and tells Arya k but not x. Arya have to find the value . There are n ancient numbers c1, c2, ..., cn and Pari has to tell Arya if Arya wants. Given k and the ancient values, tell us if Arya has a winning strategy independent of value of x or not. Formally, is it true that Arya can understand the value for any positive integer x?
Note, that means the remainder of x after dividing it by y.
输入
The first line of the input contains two integers n and k (1 ≤ n, k ≤ 1 000 000) — the number of ancient integers and value k that is chosen by Pari.
The second line contains n integers c1, c2, ..., cn (1 ≤ ci ≤ 1 000 000).
输出
Print "Yes" (without quotes) if Arya has a winning strategy independent of value of x, or "No" (without quotes) otherwise.
样例
input
4 5
2 3 5 12
output
Yes
input
2 7
2 3
output
No
题意
给你n个数和一个k,求x%k的值,没有告诉你x是多少,只告诉你能够计算x%ci的值。问能不能根据这n次测试唯一确定x%k。
题解
思路1:
结论:无法唯一确定x%k <==> k不能整除lcm(c1,...,cn);
充分性:
无法唯一确定x%k --> 存在两个数x1,x2对于任意的ci取余的值都相等,对k取值的值却不等。
- x1,x2对任意的ci取余都相等 --> ci|(x1-x2) --> lcm(ci)|(x1-x2).
 - x1,x2对k取余的值不等 --> k不整除(x1-x2) --> k不整除lcm(ci)
 
必要性:
我们令x1=2*lcm(ci),x2=lcm(ci),则易知有x1,x2对于任意的ci取余的值都相等,且因为k不能整除lcm(ci),所以x1,x2对k取余的值不等。 所以ci不能确定x%k的值。
思路2:
题目已经给我们n个线性同余方程:x%c[i]==a[i]%c[i]。
由于a数组是由我们任意选择的,所以我们可以构造所有的a相等,从而使得对于任意的i,j,有a[i]%(gcd(ci,cj))等于a[j]%(gcd(ci,cj))。这样,由中国剩余定理就可以知道x%(lcm(c1,...,cn))有唯一解了。  那么我们只要使得k能整除lcm(c1,...,cn)那么易知x%k的值也是固定的。
代码
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef __int64 LL;
LL n, k;
LL gcd(LL a, LL b) { return b == 0 ? a : gcd(b, a%b); }
LL lcm(LL a, LL b) { return a*b / gcd(a, b); }
int main() {
	scanf("%I64d%I64d", &n, &k);
	LL lcm_ci = 1;
	bool su = 0;
	for (int i = 1; i <= n; i++) {
		LL x;
		scanf("%I64d", &x);
		lcm_ci = lcm(lcm_ci, x);
		lcm_ci = gcd(k, lcm_ci);
		if (lcm_ci == k) {
			su = 1; break;
		}
	}
	if (su) puts("Yes");
	else puts("No");
	return 0;
}												
											Codeforces Round #360 (Div. 2) D. Remainders Game 中国剩余定理的更多相关文章
- Codeforces Round #360 (Div. 2) D. Remainders Game
		
D. Remainders Game time limit per test 1 second memory limit per test 256 megabytes input standard i ...
 - Codeforces Round #360 (Div. 2) D. Remainders Game 数学
		
D. Remainders Game 题目连接: http://www.codeforces.com/contest/688/problem/D Description Today Pari and ...
 - Codeforces Round #360 (Div. 1) D. Dividing Kingdom II 暴力并查集
		
D. Dividing Kingdom II 题目连接: http://www.codeforces.com/contest/687/problem/D Description Long time a ...
 - Codeforces Round #360 (Div. 2) C. NP-Hard Problem 水题
		
C. NP-Hard Problem 题目连接: http://www.codeforces.com/contest/688/problem/C Description Recently, Pari ...
 - Codeforces Round #360 (Div. 2) B. Lovely Palindromes 水题
		
B. Lovely Palindromes 题目连接: http://www.codeforces.com/contest/688/problem/B Description Pari has a f ...
 - Codeforces Round #360 (Div. 2) A. Opponents 水题
		
A. Opponents 题目连接: http://www.codeforces.com/contest/688/problem/A Description Arya has n opponents ...
 - Codeforces Round #360 (Div. 1)A (二分图&dfs染色)
		
题目链接:http://codeforces.com/problemset/problem/687/A 题意:给出一个n个点m条边的图,分别将每条边连接的两个点放到两个集合中,输出两个集合中的点,若不 ...
 - Codeforces Round #360 (Div. 1) D. Dividing Kingdom II 并查集求奇偶元环
		
D. Dividing Kingdom II Long time ago, there was a great kingdom and it was being ruled by The Grea ...
 - Codeforces Round #360 (Div. 2) E. The Values You Can Make DP
		
E. The Values You Can Make Pari wants to buy an expensive chocolate from Arya. She has n coins, ...
 
随机推荐
- list转换成DataTable
			
list转换成DataTable类如下: public static DataTable ToDataTable<T>(this IList<T> datas) { DataT ...
 - vs怎么创建MVC及理解其含义
			
怎么创建MVC项目 一·1.点击 文件à新建à项目à模板àVisua C#(选择 .NET Framework 4.0或以上版本) à选择 MVC 3 Web应用程序 或者MVC 4 Web应用程序à ...
 - CCNA长语
			
思科认证网络支持工程师(Cisco Certified Network Associate_CCNA) 专业英文词汇大全 10BaseT-----原始IEEE802.3标准的一部分,1OBaseT是1 ...
 - 理解C#系列 / 核心C# / 编译参数
			
编译参数 编译控制台应用程序 csc 源文件.cs 编译Windows应用程序 csc /t:winexe 源文件.cs 编译类库应用程序 csc /t:libray 源文件.cs 编译引用类库的应用 ...
 - JAVA:类的三大特征,抽象类,接口,final关键字<3>
			
一.类的三大特征 1.封装性 (1).什么是封装 封装就是把抽象出的数据和对数据的操作封装在一起, 数据被保护在内部, 程序的其他部分只有通过被授权的操作(成员方法), 才能对数据进行操作. (2). ...
 - Find the Difference
			
Given two strings s and t which consist of only lowercase letters. String t is generated by random s ...
 - 【风马一族_git_github】github项目建成网站
			
---------------------------------------- 1)点击 Settings 2)上一个红色矩形是访问的网址,下一个红色矩形是用来设置页面相关的信息 3)页面信息的修改 ...
 - 基于FPGA的图像去噪
			
目录 结构图 其中FPGA 控制模块为核心,通过它实现视频图像数据的获取.缓存.处理和控制各模块间通讯[1].由CCD 相机对目标成像,高速图像数据由camera link 实时传输[2],经信号转换 ...
 - 利用PowerDesigner绘制PDM生成SQL Server数据库
			
PowerDesigner是个很强大的建模工具,可以利用它绘制各种图形,本文利用该工具绘制PDM,进而生成SQL Server数据库. 比如绘制一个简单的学生选课.教师授课管理系统的PDM: pk表示 ...
 - 解决Handler与Activity同步冲突
			
这个问题可以由Handler的一个子类HandlerThread来解决. 程序参考自Mars老师的Android课程第一季第十五集. 代码以及注释有所改动,如下: package com.handle ...