第1题

阅读以下代码:

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
26
27
28
def prime_generator():
num = 2
prime_list = []
while True:
isprime = True
for j in prime_list:
if num%j == 0:
isprime = False
break

if isprime:
prime_list.append(num)
yield num
num = num + 1

def get_prime(nums, min=1, max=1):
pre_num = nums + min - 1
pg = prime_generator()
prime_list = [next(pg) for i in range(pre_num)]

if min > 1:
prime_list = list(filter(lambda x: x>=min, prime_list))
if max > 1:
prime_list = list(filter(lambda x: x<=max, prime_list))

if len(prime_list) > nums: prime_list=prime_list[0:nums]

return prime_list

请写出调用以下函数实现的功能:

  1. get_prime(100)
    • 功能(此处作答):
  2. get_prime(20, max=200)
    • 功能(此处作答):
  3. get_prime(20, min=100)
    • 功能(此处作答):
  4. get_prime(20, min=100, max=200)
    • 功能(此处作答):

第2题

设有N个人围坐在一张圆桌,从1到N进行编号,现从第1个人开始报数,数到第m的人出列,然后从出列的下一个重新开始报数,数到第m的人有出列……如此反复,直到所有的人全部出列为止。

编写一段代码,对于给定的N和m,打印出按照出列次序的前N/2(取整)个人员的序列。

测试程序,给出N = 20, m = 5, 出列顺序应该如下:5,10,15,20,6,12,18,4,13,1

第3题

请按要求在每个小题后的单元格编写相应的代码:

设$c$是一个固定的复数,在复平面上选取初值$x_0$,考虑迭代公式:
$$
x_{t} = x_{t-1}^2 + c
$$

  1. 请完善编写以下函数py_set_frac,该函数接收c,z,time三个参数:
    • c为上面迭代公式的常数复数
    • z是ndarray二维数组,dtype是np.complex
    • time是ndarray二维数组,dtype是np.int32

该函数对z中的每个元素z[m,n]当做初值$x_0$进行上述迭代直到$t=255$, 迭代过程中若$|x_t|>2$, 则提前终止迭代,time[m,n]记录此时的t值

1
2
3
4
5
import numpy as np
def py_set_frac(c, z, time):
# 请在此行后补充代码


  1. 请补充下面的代码块,生成复平面$[-1,1]\times [-1j, 1j]$上等距分布的$N\times N$个点,保存在变量z中,
    z为NumPy模块的ndarray二维数组,dtype为np.complex

提醒:python中用j表示复数单位,如:

1
a = 3; b = 4; c = a + 1j*b
1
2
3
4
5
N = 256
# 请在此行后补充代码



3)【验证代码】补充完上述代码并执行无误后,再执行下面单元的脚本,若你的代码正确,会得到类似如下的图像

12.png

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 【验证代码】补充完上面单元格的代码并执行后,再执行此单元的脚本验证
# 【注意】此段代码可能会比较慢,约需1分钟(取决于你编写的函数py_set_frac()的效率)
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots(nrows=1, ncols=2, figsize=(12,6))
T = np.zeros((N, N), np.int32)

c = 0.68j-0.05 # c= -0.8+0.156j
py_set_frac(c, z, T)
ax[0].imshow(T,cmap=plt.cm.RdBu_r, extent=[-1, 1, -1, 1])

c = 0.285-0.01j
py_set_frac(c, z, T)
ax[1].imshow(T,cmap=plt.cm.RdBu_r, extent=[-1, 1, -1, 1])

plt.show()