提出 #72181588


ソースコード 拡げる

#include <algorithm>
#include <array>
#include <bitset>
#include <cassert>
#include <chrono>
#include <climits>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <deque>
#include <exception>
#include <fstream>
#include <functional>
#include <iomanip>
#include <iostream>
#include <iterator>
#include <limits>
#include <list>
#include <map>
#include <memory>
#include <new>
#include <numeric>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <stdexcept>
#include <streambuf>
#include <string>
#include <tuple>
#include <typeinfo>
#include <unordered_map>
#include <unordered_set>
#include <utility>
#include <vector>

using ll = long long;
using ld = long double;
using namespace std;
#define endl "\n"
#define ff first
#define ss second

#define forn(i,n) for(int i=0;i<n;i++)
#define dbgv(v) cout<<#v<<" "<<v<<endl
#define dbga(a,n) forn(i,n-1) {cout<<a[i]<<' ';} cout<<a[n-1]<<'\n';
#define all(v) (v).begin(), (v).end()


const int N = 1e7 + 5;
int lp[N],c[N],st[N];
vector<int> pr;

void pre(){
    st[1]=0;
    for(int i=2;i<N;i++){
        if(lp[i]==0){
            lp[i]=i;
            c[i]=1;
            pr.push_back(i);
            if(i%4==3) st[i]=-1;
            else if(i==2) st[i]=0;
            else st[i]=1;
        }
        for(auto p:pr){
            if(p>lp[i]||(ll)i*p>=N) break;
            int x=i*p;
            lp[x]=p;
            if(lp[i]==p) c[x]=c[i]+1;
            else c[x]=1;
            
            int y=i;
            if(c[x]>1) y/=p;
            int ps=st[y];
            
            if(ps==-1){
                st[x]=-1;
            }else if(p==2){
                st[x]=ps;
            }else if(p%4==3){
                if(c[x]%2!=0) st[x]=-1;
                else st[x]=ps;
            }else{
                if(ps!=0) st[x]=-1;
                else{
                    if(c[x]==1) st[x]=1;
                    else if(c[x]==2) st[x]=2;
                    else st[x]=-1;
                }
            }
        }
    }
}

void solve(){
    int n;
    if(cin>>n){
        vector<int> ans;
        for(int i=1;i<=n;i++){
            if(st[i]==1||st[i]==2) ans.push_back(i);
        }
        cout<<ans.size()<<endl;
        int sz=ans.size();
        forn(i,sz){
            cout<<ans[i]<<(i==sz-1?"":" ");
        }
        cout<<endl;
    }
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    pre();

    int T = 1;
    while(T--){
        solve();
    }
    return 0;
}

提出情報

提出日時
問題 C - 2026
ユーザ SummitDevil
言語 C++23 (GCC 15.2.0)
得点 300
コード長 2636 Byte
結果 AC
実行時間 176 ms
メモリ 130812 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 300 / 300
結果
AC × 3
AC × 18
セット名 テストケース
Sample 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt
All 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_random_00.txt, 01_random_01.txt, 01_random_02.txt, 01_random_03.txt, 01_random_04.txt, 01_random_05.txt, 01_random_06.txt, 01_random_07.txt, 01_random_08.txt, 01_random_09.txt, 02_corner_00.txt, 02_corner_01.txt, 02_corner_02.txt, 02_corner_03.txt, 02_corner_04.txt
ケース名 結果 実行時間 メモリ
00_sample_00.txt AC 121 ms 124636 KiB
00_sample_01.txt AC 121 ms 124664 KiB
00_sample_02.txt AC 121 ms 124780 KiB
01_random_00.txt AC 143 ms 127200 KiB
01_random_01.txt AC 169 ms 129628 KiB
01_random_02.txt AC 145 ms 127052 KiB
01_random_03.txt AC 171 ms 130020 KiB
01_random_04.txt AC 138 ms 125096 KiB
01_random_05.txt AC 149 ms 127880 KiB
01_random_06.txt AC 144 ms 126332 KiB
01_random_07.txt AC 140 ms 126240 KiB
01_random_08.txt AC 148 ms 127548 KiB
01_random_09.txt AC 174 ms 130428 KiB
02_corner_00.txt AC 124 ms 124780 KiB
02_corner_01.txt AC 176 ms 130812 KiB
02_corner_02.txt AC 174 ms 130752 KiB
02_corner_03.txt AC 175 ms 130784 KiB
02_corner_04.txt AC 173 ms 130748 KiB