原题链接:E - Coprime
题意:
1.称序列a"pairwise coprime",当且仅当a中的数两两互质。
2.称序列a"setwise coprime",当且仅当a不为"pairwise coprime",但是整个序列的gcd为1。
3.其他情况为"not coprime".
给定长度为n的序列a,要求判断该序列是上面哪种情况.
思路:这题我看大部分人用线性筛写,但其实直接暴力枚举就行了。
#define _CRT_SECURE_NO_WARNINGS 1
#include <math.h>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <stack>
#define FOR(a, b) for (int i = a; i <= b; i++)
#define ROF(a, b) for (int i = a; i >= b; i--)
#define FORj(a, b) for (int j = a; j <= b; j++)
#define ROFj(a, b) for (int j = a; j >= b; j--)
#define FORk(a, b) for (int k = a; k <= b; k++)
#define ROFk(a, b) for (int k = a; k >= b; k--)
#define mem(i, a) memset(i, a, sizeof(i))
#define ll long long
#define inf 0x3f3f3f3f
#define PII pair<int, int>
#define lson l, m, rt << 1
#define rson m + 1, r, rt << 1 | 1
#define int long long
#define endl '\n'
#define yes cout << "YES" << endl
#define no cout << "NO" << endl
#define pi acos(-1.0)
using namespace std;
const int maxn = 2e6 + 5;
int a[maxn];
int mp[maxn];
void solve() {
int n,sum=0;
cin>>n;
FOR(1,n) {
cin>>a[i];
mp[a[i]]++;
sum=__gcd(sum,a[i]);
}
for(int i=2; i<=1500000; i++) {
int cnt=0;
for(int j=i; j<=1500000; j+=i) {
cnt+=mp[j];
if(cnt>1) {
if(sum==1)cout<<"setwise coprime"<<endl;
else cout<<"not coprime"<<endl;
return;
}
}
}
cout<<"pairwise coprime"<<endl;
}
signed main() {
cin.tie(0);
cout.tie(0);
ios::sync_with_stdio(0);
// int _;
// cin >> _;
// while (_--)
solve();
return 0;
}