其他分享
首页 > 其他分享> > 题解 6.21校内考试T4 结队

题解 6.21校内考试T4 结队

作者:互联网

题解 6.21校内考试T4 结队

题目描述

211005_MTmm8MfcQS.png 211005_WTSYSCFRcf.png

对于这道题,可以用埃筛统计出质因子的同时,用并查集合并同一帮派即可。

需要注意的是,这道题不是纯正的筛质数,埃筛的第二重循环不能从 i*i 开始,只能老老实实从 i 开始循环。

CODE

const int mn=5e4+10;
const int mm=5e4+10;
const int mod=1e9+7;
const int inf=0x3f3f3f3f;
const int fni=0xc0c0c0c0;
int a,b,k;
bool v[mn],o[mn];
int p[mn],tot;
int f[mn];
int find(int x){return f[x]==x?x:f[x]=find(f[x]);}
void merge(int a,int b){f[find(b)]=find(a);}
inline void read_init(){
    a=read<int>();b=read<int>();k=read<int>();
    for(int i=1;i<=b;i++)
        f[i]=i;
    for(int i=2;i<=b;i++){
        if(v[i])continue;
        p[++tot]=i;
        for(ll j=i;j<=b;j+=i){
            v[j]=i;
            if(i>=k && j>=a && j<=b)
                merge(j,(a-1)/i*i+i);
        }
    }
}
int main(){
    // freopen("merge.in","r",stdin);
    // freopen("merge.out","w",stdout);
    read_init();
    int sum=0;
    for(int i=a;i<=b;i++)
        if(!o[find(i)]){
            o[find(i)]=1;
            sum++;
        }
    write(sum,1);
    return 0;
}

标签:const,int,题解,T4,mn,read,6.21,find
来源: https://www.cnblogs.com/ex-asbable/p/16428763.html