集合30pts求助!
  • 板块P1621 集合
  • 楼主yuhaotian000
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/7/20 16:31
  • 上次更新2025/7/20 17:14:17
查看原帖
集合30pts求助!
774823
yuhaotian000楼主2025/7/20 16:31
#include <bits/stdc++.h>
using namespace std;
int f[100005],vis[100005],pr[100005];
int find(int x){
  if(x!=f[x]) f[x]=find(f[x]);
  return f[x];
}
bool is_prime(int x){
  if(x==0||x==1) return false;
  for(int i=2;i<=sqrt(x);i++){
    if(x%i==0){
      return false;
    }
  }
  return true;
}
int main(){
  int n,m,p;
  cin>>n>>m>>p;
  int s=m-n+1;
  for(int i=n;i<=m;i++){
    f[i]=i;
  }
  int cnt=0;
  for(int i=1;i<=m;i++){
    if(is_prime(i)){
      pr[++cnt]=i;
    }else{
      vis[i]=1;
    }
  }
  for(int i=1;i<=cnt;i++){
    if(pr[i]>=p){
      int x;
      if(n%pr[i]==0){
        x=n;
      }else{
        x=n+pr[i];
      }
      for(int j=x+pr[i];j<=m;j+=pr[i]){
        if(find(x)!=find(j)){
          f[j]=x;
          s--;
        }
      }
    }
  }
  cout<<s;
}
2025/7/20 16:31
加载中...