結果

問題 No.1871 divisXor
ユーザー lam6er
提出日時 2025-04-16 00:24:47
言語 PyPy3
(7.3.15)
結果
TLE  
実行時間 -
コード長 1,800 bytes
コンパイル時間 305 ms
コンパイル使用メモリ 81,784 KB
実行使用メモリ 83,756 KB
最終ジャッジ日時 2025-04-16 00:26:31
合計ジャッジ時間 4,329 ms
ジャッジサーバーID
(参考情報)
judge5 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other TLE * 1 -- * 28
権限があれば一括ダウンロードができます

ソースコード

diff #

import math

def sum_divisors(x):
    if x == 0:
        return 0
    total = 0
    sqrt_x = int(math.isqrt(x))
    for i in range(1, sqrt_x + 1):
        if x % i == 0:
            total += i
            if i != x // i:
                total += x // i
    return total

def find_single_x(N):
    max_x = 2 * N - 1
    for x in range(1, max_x + 1):
        if sum_divisors(x) == N:
            return [x]
    return None

def find_even_pair(N):
    candidates = []
    for x in range(1, 2 * N):
        if x % 2 == 0:
            fx = sum_divisors(x)
            candidates.append((x, fx))
    for i in range(len(candidates)):
        a, fa = candidates[i]
        for j in range(i + 1, len(candidates)):
            b, fb = candidates[j]
            if (fa ^ fb) == N and (a + b) < 2 * N:
                return [a, b]
    return None

def find_odd_pair(N):
    target = N ^ 1
    candidates = []
    for x in range(1, 2 * N):
        if x % 2 == 0 and x != 1:
            fx = sum_divisors(x)
            candidates.append((x, fx))
    for i in range(len(candidates)):
        a, fa = candidates[i]
        for j in range(i + 1, len(candidates)):
            b, fb = candidates[j]
            if (fa ^ fb) == target and (a + b) < (2 * N - 1):
                return [1, a, b]
    return None

def solve():
    N = int(input())
    if N == 0:
        print(-1)
        return

    single = find_single_x(N)
    if single:
        print(1)
        print(single[0])
        return

    if N % 2 == 0:
        pair = find_even_pair(N)
        if pair:
            print(2)
            print(' '.join(map(str, pair)))
            return
    else:
        trio = find_odd_pair(N)
        if trio:
            print(3)
            print(' '.join(map(str, trio)))
            return

    print(-1)

solve()
0