玄关,求条
查看原帖
玄关,求条
681941
OIer_Hhy楼主2024/8/6 18:19
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,q,x,opt;
set<int> st,st2;
map<int,int> mp;
void func(int x){
	st2.insert(x);
	int k=2;
	while(x>1){
		while(k*k<=x&&x%k!=0) k++;
		if(k*k>x) break;
		st.insert(k);
		while(x%k==0){
			mp[k]++;
			x/=k;
		}
	} 
	if(x>1){
		st.insert(x);
		++mp[x];
	}
}
bool d(){
	vector<int> v1,v2;
//	int k=1,k2=1;
	for(auto x:st){
		v1.emplace_back(mp[x]+1);
//		k*=(mp[x]+1);
	}
	for(auto x:st2){
		v2.emplace_back(x);
//		k2*=x;
	}
//	cout<<k<<' '<<k2<<endl;
	for(int i=0;i<v1.size();i++){
		for(int j=0;j<v2.size();j++){
			int GCD=__gcd(v1[i],v2[j]);
			v1[i]/=GCD;
			v2[j]/=GCD;
		}
	}
	for(int i=0;i<v1.size();i++){
		if(v1[i]!=1) return 0;
	}
	return 1;
}
void solve(){
	st.clear();
	st2.clear();
	mp.clear();
	cin>>n>>q;
	int pre_n=n;
	func(n);
	while(q--){
		cin>>opt;
		if(opt==1){
			cin>>x;
			func(x);
			int res=d();
			if(res) puts("YES");
			else puts("NO");
		}else{
			st.clear();
			st2.clear();
			mp.clear();
			n=pre_n;
			func(n);
		}	
	}
	puts("");
}
signed main(){
	int T;
	cin>>T;
	while(T--) solve();
	return 0;
}

2024/8/6 18:19
加载中...