求助 在本地可以跑通 结果交上去RE
  • 板块P1621 集合
  • 楼主__zhangyx__
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/1/25 21:59
  • 上次更新2024/1/26 10:06:25
查看原帖
求助 在本地可以跑通 结果交上去RE
622371
__zhangyx__楼主2024/1/25 21:59
#include<bits/stdc++.h>

using namespace std;

#define int long long
typedef pair<int,int> PII;

const int N = 1e6;
const int INF = 0x7f7f7f7f;

int fa[N + 5];
int a,b,p;
bool st[N + 5];
int primes[N + 5],cnt = 0;

int find(int x) {
    if (x == fa[x]) return x;
    return find(fa[x]);
}

int un(int x,int y) {
    int a = find(x);
    int b = find(y);
    fa[a] = b;
}

void init() {
    for (int i = 2;i <= b;i ++) {
        if (!st[i]) primes[cnt ++] = i;
        for (int j = 0;primes[j] * i <= b;j ++) {
            st[i * primes[j]] = true;
            if (i % primes[j] == 0) break;
        }
    }
}

void solve() {
    cin >> a >> b >> p;
    init();
    // for (int i = 0;i < cnt;i ++) cout << primes[i] << " ";
    // cout << endl;
    
    for (int i = a;i <= b;i ++) fa[i] = i;
    vector<int> v;
    for (int i = 0;i < cnt;i ++) {
        v.clear();
        if (primes[i] >= p) {
            for (int j = primes[i];j <= b;j += primes[i]) if (j >= a) v.push_back(j);
        }
        for (int j = 1;j < v.size();j ++) un(v[j],v[j - 1]);
    }
    
    int res = 0;
    for (int i = a;i <= b;i ++) if (find(i) == i) res ++;
    printf("%lld",res);
} 
 
signed main() {
    std::ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
    int T = 1;//cin >> T;
    while (T --) solve();
}
2024/1/25 21:59
加载中...