社区讨论

nsdd,但我是dp(double player)

P4752Divided Prime参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mjzrzxmt
此快照首次捕获于
2026/01/04 21:36
2 个月前
此快照最后确认于
2026/01/04 21:39
2 个月前
查看原帖
数据太水了还是怎么说
CPP
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
const int maxv=1e6+5;
long long a[maxn],b[maxn];
bitset<maxv> ok;
vector<int> prime;
int main(){
	for(int i=2;i<maxv;i++){
		if(!ok[i])prime.emplace_back(i);
		for(int j:prime){
			if(j*i>=maxv)break;
			ok[j*i]=1;
			if(i%j==0)break;
		}
	}
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	int T;
	cin>>T;
	while(T--){
		int n,m;
		cin>>n>>m;
		for(int i=1;i<=n;i++)cin>>a[i];
		for(int i=1;i<=m;i++)cin>>b[i];
		sort(a+1,a+n+1,greater<int>());
		sort(b+1,b+m+1,greater<int>());
		int i=1,j=1;
		long double tot=1;
		while(i<=n&&j<=m){
			tot*=a[i];
			i++;
			while(tot>=b[j]&&j<=m)tot/=b[j],j++;
		}
		while(j<=m)tot/=b[j],j++;
		while(i<=n)tot*=a[i],i++;
		long long xx=tot+0.5;
		if(xx<=1||xx>=1e12){
			cout<<"NO\n";
			continue;
		}
		bool ok=0;
		for(int p:prime){
			if(p*p>xx)break;
			if(xx%p==0){
				cout<<"NO\n";
				ok=1;
				break;
			}
		}
		if(!ok){
			cout<<"YES\n";
		}
	}
	return 0;
}

我要写题解!!111

回复

0 条回复,欢迎继续交流。

正在加载回复...