提出 #31413806


ソースコード 拡げる

#include <vector>
#include <algorithm>
#include <cassert>
#include <iostream>


namespace nachia{

namespace prime_sieve_explicit_internal{
    std::vector<bool> isprime = { false }; // a[x] := isprime(2x+1)

    void CalcIsPrime(int z){
        if((int)isprime.size() *2+1 < z+1){
            int new_z = isprime.size();
            while(new_z*2+1 < z+1) new_z *= 2;
            z = new_z-1;
            isprime.resize(z+1, true);
            for(int i=1; i*(i+1)*2<=z; i++) if(isprime[i]){
                for(int j=i*(i+1)*2; j<=z; j+=i*2+1) isprime[j] = false;
            }
        }
    }
}


bool IsprimeExplicit(int n){
    using namespace prime_sieve_explicit_internal;
    if(n == 2) return true;
    if(n % 2 == 0) return false;
    CalcIsPrime(n);
    return isprime[(n-1)/2];
}
  
}

#include <string>
using namespace std;
using i32 = int32_t;
using u32 = uint32_t;
using i64 = int64_t;
using u64 = uint64_t;
#define rep(i,n) for(int i=0; i<(int)(n); i++)

vector<int> spf;
struct spf_init{
    spf_init(){
        int Z = 1000000;
        spf.resize(Z+1);
        for(int p=Z; p>=2; p--) if(nachia::IsprimeExplicit(p)) {
            for(int q=p; q<=Z; q+=p) spf[q] = p;
        }
    }
} spf_init_inst;

vector<pair<int,int>> factorize(int a){
    vector<pair<int,int>> res;
    while(a != 1){
        int p = spf[a];
        int c = 0;
        while(spf[a] == p){
            a /= p;
            c++;
        }
        res.push_back(make_pair(p,c));
    }
    return res;
}

#include <atcoder/modint>
using m32 = atcoder::modint998244353;

int main(){
    int N; cin >> N;
    vector<int> A(N); rep(i,N) cin >> A[i];

    const int Z = 1000000;

    vector<vector<int>> PC(Z+1);
    for(int a : A) for(auto [p,e] : factorize(a)){
        if((int)PC[p].size() < e) PC[p].resize(e);
        rep(ee,e) PC[p][ee]++;
    }

    m32 all_lcm = 1;
    rep(z,Z+1) all_lcm *= m32(z).pow(PC[z].size());
    vector<m32> Inv(Z+1);
    Inv[1] = 1;
    for(int i=2; i<=Z; i++) Inv[i] = -(Inv[m32::mod() % i] * (m32::mod() / i));

    int Q; cin >> Q;
    rep(i,Q){
        int K; cin >> K;
        vector<int> I(K);
        m32 ans = all_lcm;
        rep(k,K){ cin >> I[k]; I[k]--; }
        for(auto i : I) for(auto [p,e] : factorize(A[i])){
            rep(ee,e) if(0 == --PC[p][ee]) ans *= Inv[p];
        }
        for(auto i : I) for(auto [p,e] : factorize(A[i])){
            rep(ee,e) PC[p][ee]++;
        }
        cout << ans.val() << '\n';
    }
    return 0;
}


struct ios_do_not_sync{
    ios_do_not_sync(){
        std::ios::sync_with_stdio(false);
        std::cin.tie(nullptr);
    }
} ios_do_not_sync_instance;

提出情報

提出日時
問題 J - Excluded LCM
ユーザ Nachia
言語 C++ (GCC 9.2.1)
得点 500
コード長 2744 Byte
結果 AC
実行時間 196 ms
メモリ 37812 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 500 / 500
結果
AC × 2
AC × 33
セット名 テストケース
Sample example_00.txt, example_01.txt
All example_00.txt, example_01.txt, test_00.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt, test_27.txt, test_28.txt, test_29.txt, test_30.txt
ケース名 結果 実行時間 メモリ
example_00.txt AC 51 ms 34552 KiB
example_01.txt AC 51 ms 34560 KiB
test_00.txt AC 186 ms 36476 KiB
test_01.txt AC 190 ms 36140 KiB
test_02.txt AC 193 ms 36092 KiB
test_03.txt AC 160 ms 35428 KiB
test_04.txt AC 167 ms 35360 KiB
test_05.txt AC 147 ms 37072 KiB
test_06.txt AC 141 ms 37204 KiB
test_07.txt AC 156 ms 37188 KiB
test_08.txt AC 148 ms 37196 KiB
test_09.txt AC 135 ms 37076 KiB
test_10.txt AC 158 ms 36344 KiB
test_11.txt AC 175 ms 36668 KiB
test_12.txt AC 166 ms 36380 KiB
test_13.txt AC 109 ms 35548 KiB
test_14.txt AC 131 ms 35916 KiB
test_15.txt AC 149 ms 37812 KiB
test_16.txt AC 132 ms 37660 KiB
test_17.txt AC 102 ms 37332 KiB
test_18.txt AC 123 ms 37404 KiB
test_19.txt AC 99 ms 37404 KiB
test_20.txt AC 192 ms 36092 KiB
test_21.txt AC 182 ms 36008 KiB
test_22.txt AC 190 ms 36076 KiB
test_23.txt AC 170 ms 35620 KiB
test_24.txt AC 117 ms 34424 KiB
test_25.txt AC 155 ms 37152 KiB
test_26.txt AC 147 ms 37188 KiB
test_27.txt AC 145 ms 37076 KiB
test_28.txt AC 159 ms 37208 KiB
test_29.txt AC 165 ms 37068 KiB
test_30.txt AC 196 ms 36132 KiB