|
楼主 |
发表于 2017-7-3 10:32:23
From FishC Mobile
|
显示全部楼层
贴一下我的代码,封装了一个类,运行效率不如你们最佳答案来得高效。
- class Challenge:
- def __init__(self, n, m):
- self.n = n
- self.m = m
- self.matrix = [[0] * m for i in range(n)]
- dire = [(0, 1), (1, 0), (0, -1), (-1, 0)]
- x, y = 0, 0
- index = 0
- for i in range(1, n * m + 1):
- self.matrix[x][y] = i
- if x + dire[index][0] < 0 or x + dire[index][0] >= n or y + dire[index][1] < 0 or y + dire[index][1] >= m or self.matrix[x + dire[index][0]][y + dire[index][1]] != 0:
- index = (index + 1) % 4
- x += dire[index][0]
- y += dire[index][1]
- self.primes = [1] * (n * m + 1)
- self.primes[:2] = [0] * 2
- for i, prime in enumerate(self.primes):
- if prime:
- for j in range(i * i, n * m + 1, i):
- self.primes[j] = 0
- def find_prime(self, i):
- for n in range(self.n):
- for m in range(self.m):
- if i == self.matrix[n][m]:
- block = self.matrix[n][max(0, m - 1):min(m + 2, self.m)]
- if 0 <= n - 1 < self.n:
- block += self.matrix[n -1][max(0, m - 1):min(m + 2, self.m)]
- if 0 <= n + 1 < self.n:
- block += self.matrix[n +1][max(0, m - 1):min(m + 2, self.m)]
- n_primes = sum((self.primes[x] for x in block)) - self.primes[i]
- return n_primes
- def solve(self):
- lst = []
- for i in range(1, self.n * self.m + 1):
- lst.append((i, self.find_prime(i)))
- return max(lst, key=lambda x: x[1])
- n, m = 100, 100
- challenge04 = Challenge(n, m)
- print(challenge04.solve())
复制代码 |
|