求平方根的三种方法

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
def close_method(num, precision=1e-4):#这里的精确度太高会导致程序死循环#趋近法
result = 0.0
i = 0.00001
while abs(result ** 2 - num) > precision:
result += i

if result ** 2 > num:#超过目标值就缩小增量(课本上没有这步)
i = -i / 10
result += i

return result

def binary_search_method(num, precision=1e-6):#二分法
low, high = 0, num
while high - low > precision:
mid = (low + high) / 2
if mid ** 2 > num:
high = mid
else:
low = mid
return low

def newton_iteration_method(num, precision=1e-6):#牛顿法
x = num
while abs(x * x - num) > precision:
x = 0.5 * (x + num / x)
return x

while True:
try:
input_num = float(input("请输入一个正整数(输入小于等于0的数退出程序): "))
if input_num <= 0:
print("程序退出")
break
close_result = close_method(input_num)
binary_result = binary_search_method(input_num)
newton_result = newton_iteration_method(input_num)
print(f"趋近法计算的平方根: {close_result}")
print(f"二分查找法计算的平方根: {binary_result}")
print(f"牛顿迭代法计算的平方根: {newton_result}")
except ValueError:
print("输入无效,请输入一个数字。")

分解质因数

1
2
3
4
5
6
7
8
9
10
11
12
13
def prime_factorize(n, factor=2):
if n < 2:
return []
if n % factor == 0:
return [factor] + prime_factorize(n // factor, factor)
return prime_factorize(n, factor + 1)


num = int(input("请输入一个正整数: "))
factors = prime_factorize(num)
result = '*'.join(map(str, factors))
print(f"{num}={result}")

分治法找最大最小数

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
import random


def find_max_min(arr, low, high):
if low == high:
return arr[low], arr[low]
elif high - low == 1:
if arr[low] < arr[high]:
return arr[high], arr[low]
else:
return arr[low], arr[high]
else:
'''分治法的递归过程'''
mid = (low + high) // 2
max1, min1 = find_max_min(arr, low, mid)
max2, min2 = find_max_min(arr, mid + 1, high)
return max(max1, max2), min(min1, min2)


n = int(input("请输入要生成的随机数的数量: "))
arr = [random.randint(1, 1000) for _ in range(n)]#生成的随机数列表
max_num, min_num = find_max_min(arr, 0, len(arr) - 1)
print(f"生成的随机数列表: {arr}")
print(f"最大数: {max_num}, 最小数: {min_num}")