比赛 ?板子大赛 评测结果 WAAWWAAWTT
题目名称 整数合并 最终得分 40
用户昵称 ychyyx 运行时间 2.672 s
代码语言 C++ 内存使用 3.90 MiB
提交时间 2026-01-17 11:15:09
显示代码纯文本
#include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;
int a,b;
int p;
int k;
int f[1000005];
int h[100][100],t[100];
int ans;
int find(int x){
    if(f[x]!=x) return find(f[x]);
    return x;
}
bool zhi(int n){
    for(int i=2;i<=sqrt(n);i++){
        if(n%2==0)
            return false;
    }
    return true;
}
bool check(int a,int b){
    a=abs(a);
    int sum=0;
    if(a==0){
        swap(a,b); 
    }
    for(int i=1;i<=sqrt(a);i++){
        if(a%i==0){
            int i2=a/i;
            if(b%i==0){
                if(zhi(i)){
                    if(i>=p)
                        return true;
                }
            }
            if(i!=i2&&b%i2==0){
                if(zhi(i2)){
                    if(i2>=p)
                        return true;
                }
            }
        }
    }
    return false;
}
int main(){
    freopen("setb.in","r",stdin);
    freopen("setb.out","w",stdout);
    cin>>a>>b>>p;  
    k=max(0,0-a);
    a+=k;
    b+=k;
    for(int i=a;i<=b;i++){
        f[i]=i;
    }
    for(int i=a;i<=b-1;i++){
        for(int j=i+1;j<=b;j++){
            int r1=find(i),r2=find(j);
            if(r1!=r2){
                if(check(i-k,j-k)){
                    f[r2]=r1;
                }
            }
        }
    }
    for(int i=a;i<=b;i++){
        if(f[i]==i){
            ans++;
        }
        t[find(i)]++;
        h[find(i)][t[find(i)]]=i-k;
    }
    cout<<ans;
    /*
    cout<<'\n';
    for(int i=a;i<=b;i++){
        if(t[i]){
            cout<<i-k<<':';
            for(int j=1;j<=t[i];j++){
                cout<<h[i][j]-k<<' ';
            }
            cout<<'\n';
        }
    }
    cout<<'\n';
    */
    return 0;
}