列表

详情


NC246912. 数组划分

描述

牛牛获得了两个长度为 n 的数组,表示为:

牛牛想知道这两个数组是否是相互独立的,两个长度为 n 的数组如果相互独立则说明有: 
     ,(即由两个数组中各选一个数组成的数对的最大公因数是 1)。

现在牛牛给你这两个数组,请你帮他判断一下两个数组是否相互独立。

输入描述

第一行输入一个整数 n
接下来一行输入 n 个空格分隔的整数代表
接下来一行输入 n 个空格分隔的整数代表
保证:


输出描述

如果牛牛的两个数组是相互独立的,请你输出字符串"Yes",否则输出字符串"No"。

示例1

输入:

3
4 1 1
9 7 10

输出:

No

示例2

输入:

4
1 3 5 7
2 4 8 22

输出:

Yes

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(g++ 7.5.0) 解法, 执行用时: 476ms, 内存消耗: 3152K, 提交时间: 2022-11-26 12:57:16

#include<bits/stdc++.h>
using namespace std;
const int N=1e7;
int a[N],b[N],n;
bool p[N],q[N];
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
		cin>>a[i],p[a[i]]=1;
	for(int i=1;i<=n;i++)
		cin>>b[i],q[b[i]]=1;
	for(int i=2;i<N;i++)
	{
		bool f1=0,f2=0;
		for(int j=i;j<N;j+=i)
			f1|=p[j],f2|=q[j];
		if(f1&&f2)
		{
			puts("No");
			return 0;
		}
	}
	puts("Yes");
	return 0;
}

C++(clang++ 11.0.1) 解法, 执行用时: 106ms, 内存消耗: 3176K, 提交时间: 2022-11-26 00:26:17

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
int a[N],b[N],n;
bool va[N],vb[N];
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++)cin>>a[i],va[a[i]]=1;
	for(int i=1;i<=n;i++)cin>>b[i],vb[b[i]]=1;
	for(int i=2;i<N;i++){
		bool fl0=0,fl1=0;
		for(int j=i;j<N;j+=i)
			fl0|=va[j],fl1|=vb[j];
		if(fl0&&fl1)return puts("No"),0;
	}
	return puts("Yes"),0;
}

上一题