結果
| 問題 |
No.1871 divisXor
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-03-31 17:48:57 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,011 bytes |
| コンパイル時間 | 266 ms |
| コンパイル使用メモリ | 82,380 KB |
| 実行使用メモリ | 61,972 KB |
| 最終ジャッジ日時 | 2025-03-31 17:50:09 |
| 合計ジャッジ時間 | 7,166 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 3 WA * 26 |
ソースコード
import sys
import math
def is_prime(n):
if n < 2:
return False
for p in [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37]:
if n % p == 0:
return n == p
d = n - 1
s = 0
while d % 2 == 0:
d //= 2
s += 1
for a in [2, 325, 9375, 28178, 450775, 9780504, 1795265022]:
if a >= n:
continue
x = pow(a, d, n)
if x == 1 or x == n - 1:
continue
for _ in range(s - 1):
x = pow(x, 2, n)
if x == n - 1:
break
else:
return False
return True
def sigma(n):
if n == 1:
return 1
total = 1 + n
sqrt_n = int(math.isqrt(n))
for i in range(2, sqrt_n + 1):
if n % i == 0:
if i * i == n:
total += i
else:
total += i + n // i
return total
def main():
N = int(sys.stdin.readline())
if N == 0:
print(-1)
return
if N == 1:
print(1)
print(1)
return
# Check single element case
if is_prime(N - 1):
print(1)
print(N - 1)
return
# Precompute sigma for a in 2..200
max_a = 200
sigma_list = []
for a in range(2, max_a + 1):
s = sigma(a)
sigma_list.append((a, s))
# Check all pairs of a and b
target = N ^ 1
found = False
best_sum = float('inf')
best_pair = None
len_s = len(sigma_list)
for i in range(len_s):
a1, s1 = sigma_list[i]
for j in range(i + 1, len_s):
a2, s2 = sigma_list[j]
if (s1 ^ s2) == target:
current_sum = 1 + a1 + a2
if current_sum < 2 * N and current_sum < best_sum:
best_sum = current_sum
best_pair = (a1, a2)
found = True
if found:
print(3)
print(1, best_pair[0], best_pair[1])
return
print(-1)
if __name__ == "__main__":
main()
lam6er