社区讨论

快挂了,才50

P1621集合参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mi4esbia
此快照首次捕获于
2025/11/18 18:06
4 个月前
此快照最后确认于
2025/11/18 18:06
4 个月前
查看原帖
CPP
#include<iostream>
#include<cstdio>
#include<queue>
#include<vector>
#include<algorithm>
#include <cmath>
#define maxa 100009
using namespace std;
int set[maxa],pml[maxa],pn,A,B,P;
bool pm[maxa];
int Min(int a,int b){return a<b? a:b;}
void mkpm(int size){
    pn=0;
    for(int i=0;i<=size;i++) pm[i]=1;
    //
    for(int i=2;i<=size;i++){
        if(pm[i]==0) continue;
        for(int j=2;j<=sqrt(i);j++)
            if(i%j==0){
                pm[i]=0;
                for(int k=i;k<=size;k+=i)
                    pm[k]=0;
                break;
            }
    }
    for(int i=2;i<=size+2;i++)
        if(pm[i]) pml[pn++]=i;
}
int facnum(int T,int a[]){
    for(int i=0;i<=T;i++) a[i]=0;
    //
    int prime,mk,maxpm=0;
    for(int i=0;i<pn;i++){
        prime=pml[i];
        mk=0;
        //
        while(T%prime==0){
            T/=prime;
            a[prime]++;
            mk=1;
        }
        if(mk) maxpm=prime;
    }
    return maxpm;
}
int fa(int x){
    if(set[x]==x) return x;
    set[x]=fa(set[x]);
    return set[x];
}
void un(int x,int y){
    if(x==13 || y==13)
        x=13;
    int fx,fy;
    fx=fa(x);
    fy=fa(y);
    if(fx!=fy){
        set[fx]=fy;
    }
}
int main(){
    scanf("%d%d%d",&A,&B,&P);
    //
    for(int i=A;i<=B+5;i++) set[i]=i;
    int maxpma,maxpmb,a[maxa],b[maxa];
    //
    mkpm(B);
    for(int i=A;i<=B;i++){
        maxpma=facnum(i,a);
        for(int j=i+1;j<=B;j++){
            maxpmb=facnum(j,b);
            if(j==13){
                j=13;
            }
            for(int k=2;k<=Min(maxpma,maxpmb);k++){
                if(pm[k] && a[k]!=0 && b[k]!=0 && k>=P){
                    un(i,j);
                    break;
                }
            }
        }
    }
    //
    int ans=0;
    for(int i=A;i<=B;i++){
        //fa(i);
        if(set[i]==i) ans++;
    }
    printf("%d\n",ans);
    return 0;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...