TAG
- 唯一分解定理 唯一分解定理 唯一分解定理时间复杂度
- O ( N ) O(\sqrt N) O(N)
//
#include<bits/stdc++.h>
using namespace std;
// #define int long long
map<int,int> mp1,mp2;
int f1=1,f2=1;
void solve()
{
int n;
scanf("%d",&n );
while( n-- )
{
int op,x;
scanf("%d%d",&op,&x );
f1*=( x>=0 ? 1 : -1 );
x=abs(x);
for( int i=2;i*i<=x;i++ ) // i*i<=x
if( x%i==0 )
while( x%i==0 )
x/=i,mp1[i]+=( op==1 ? 1 : -1 );
if( x>1 ) mp1[x]+=( op==1 ? 1 : -1 ); // x>1
}
scanf("%d",&n );
while( n-- )
{
int op,x;
scanf("%d%d",&op,&x );
f2*=( x>=0 ? 1 : -1 );
x=abs(x);
for( int i=2;i*i<=x;i++ )
if( x%i==0 )
while( x%i==0 )
x/=i,mp2[i]+=( op==1 ? 1 : -1 );
if( x>1 ) mp2[x]+=( op==1 ? 1 : -1 );
}
bool f=1;
if( f1==f2 )
{
for( auto [x,y]:mp1 )
if( mp2[x]!=y ) { f=0; break; }
}
else f=0;
printf("%s\n",f ? "YES" : "NO" );
}
signed main()
{
int t=1;
// scanf("%d",&t );
while( t-- ) solve();
return 0;
}
实现细节
i * i <= x
x > 1
参考示意图
- 无
参考链接
作者 | 乐意奥AI