제출 #1364421

#제출 시각아이디문제언어결과실행 시간메모리
1364421seungchan1eHack (APIO25_hack)C++20
100 / 100
76 ms916 KiB
#ifndef EVAL
#include "grader.cpp"
#endif

#include <bits/stdc++.h>

#include "hack.h"

using namespace std;

using ll = long long;

// n의 배수가 [l, r) 구간에 존재하는가?
bool Q(ll l, ll r)
{
    ll d = r - l + 1;
    ll s = 1;
    while((s+1)*(s+1) <= d) s++;

    vector<ll> q; q.reserve(2*s+1);
    for(ll i = 1; i <= s; i++) q.push_back(i);
    for(ll i = l+s; i < r; i += s) q.push_back(i);
    q.push_back(r);
    sort(q.begin(), q.end());
    q.erase(unique(q.begin(), q.end()), q.end());

    ll co = collisions(q);
    // cout << format("{} {} {} {}\n", l, r, co > 0, s);
    return co > 0;
}

int hack()
{
    ll lo = 1e9/2;
    ll hi = 1e9+1;
    while(lo+1 < hi) {
        ll mid = (lo+hi)/2;
        if(Q(lo, mid)) hi = mid;
        else lo = mid;
    }
    ll m = lo;
    vector<ll> f;
    for(ll i = 2; i*i <= m; i++) {
        if(m%i == 0) f.push_back(i);
        while(m%i == 0) {
            m /= i;
        }
    }
    if(m > 1) f.push_back(m);

    ll n = lo;
    for(auto i : f) {
        while(n % i == 0) {
            ll p = n / i;
            if(collisions({1, p+1})) n /= i;
            else break;
        }
    }
    return n;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…