思路:
- 题目信息: 转化: 选出子序列求一个gcd, 很关键
- 基底转化: 枚举1-1e6的数, 看能不能产生这个数,
- 在利用那个那个的性质即可, 贪心让所有合理的数gcd起来是不是1
#include <bits/stdc++.h> using namespace std; #define M 2000005 #define ri int int n,m; int T; int p[M]; int flag[M]; int gcd(int a,int b) { if(a<b) swap(a,b); if(a%b==0) return b; return gcd(b,a%b); } int qu[M]; int main(){ ios::sync_with_stdio(false); cin.tie(0);cout.tie(0); cin>>n; for(ri i=1;i<=n;i++) { cin>>p[i]; flag[p[i]]=1; } int ans=0; for(ri i=1;i<=1e6;i++) { int tmp=0,r=0; if(flag[i]) continue ; for(ri j=2;j<=1e6&&i*j<=1e6;j++) { if(flag[i*j]) { if(r==0) tmp=j,r++; else tmp=gcd(tmp,j); if(tmp==1) { ans++; break; } } } } cout<<ans; return 0; }View Code
标签:Adding,gcd,int,ri,转化,基底,操作,CF2D From: https://www.cnblogs.com/Lamboofhome/p/17136928.html