# C

# 题目大意

如果一个数 nn,能够找到唯一一对 x,y(0<x<y)x, y~(0 < x < y),满足 x2+y2=nx^2+y^2=n 的话,那么就称 nn好数

现在,给你 nn,请问,1n1 \to n 有多少好数?请你输出他们

# 数据范围

  • 1n1071 \le n \le 10^7

# 题解

这题实际上考的是预处理,我们只需要定义一个 cnt ,然后预处理出所有数可能出现的次数即可了,复杂度是 O(N2)O( {\sqrt{N}}^2),可以接受

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from math import sqrt

N = 10 ** 7 + 10

cnt = [0 for _ in range(N)]

for i in range(1, int(sqrt(N))):
j = i + 1
k = i * i
num = k + j * j

while num <= N - 10:
cnt[num] += 1
j += 1
num = k + j * j

n = int(input())

res = []
for i in range(n + 1):
if cnt[i] == 1:
res.append(i)

print(len(res))
for i in res: print(i, end = ' ')

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

duoxichangan 微信支付

微信支付

duoxichangan 支付宝

支付宝