实验五 常用的算法设计方法
有更好的程序请留言哦,可以一起交流
1.从键盘输入N的值,求 ∑ i = 1 N ( X i − Y i 2 ) \displaystyle\sum_{i=1}^{N}(X_i-Y_i^2) i=1∑N(Xi−Yi2)的值。其中, X i = { i 2 ( i 为偶数 ) i ( i 为奇数 ) X_i=\lbrace^{i(i为奇数)}_{\frac{i}{2}(i为偶数)} Xi={2i(i为偶数)i(i为奇数), Y i = { i 3 ( i 为偶数 ) i 2 ( i 为奇数 ) Y_i=\lbrace^{i^2(i为奇数)}_{i^3(i为偶数)} Yi={i3(i为偶数)i2(i为奇数)。
N=int(input())
sum1=sum2=0
i=1
for i1 in range (1,N+112):
if i<=N:
sum1+=(i1-pow(i1,4))
i+1
print(sum1)
for i2 in range (2,N+1,2):
if i<=N:
sum2+=((i2)/2-pow(i2,6))
i+1
print(sum2)
结果演示:
5
-4291728792
-4157.0
6
-4479117396
-50810.0
2.设 s = 1 + 1 2 + 1 3 + ⋯ + 1 n s=1+\frac{1}{2}+\frac{1}{3}+\dots+\frac{1}{n} s=1+21+31+⋯+n1,求与8最接近的s的值及与之对应的n值。
n=int(input("请输入n值:"))
s=0
for i in range (1,n+1):
s+=1/i
i+1
print(float(s))
结果演示:
请输入n值:1673
7.999888200430668
3. [1,100]间有奇数个不同因子的整数共有多少个?其中最大的一个是什么数?
m=0
for i in range (1,101):
n=0
for j in range(1,i):
if i%j==0:
n+=1
if n%2!=0:
max=i
m+=1
print("{0}的因子个数为{1}.".format(i,n))
print(m,max)
结果演示:
省略了部分结果
2的因子个数为1.
3的因子个数为1.
5的因子个数为1.
...
96的因子个数为11.
97的因子个数为1.
98的因子个数为5.
99的因子个数为5.
90 99
4.梅森尼数是指 2 n − 1 2^n-1 2n−1为素数的数n,求[1,21]内有多少个梅森尼数以及最大的梅森尼数。
def sushu(n):
for i in range(2, n):
if n % i ==0:
return False
return True
def meiNumber(n):
list = []
for i in range(2, n):
if sushu(i):
if sushu(2**i-1):
list.append(2**i-1)
return list
print (meiNumber(21))
print("最大的梅森尼数为:",max(meiNumber(21)))
结果演示:
[3, 7, 31, 127, 8191, 131071, 524287]
最大的梅森尼数为: 524287
5.已知A>B>C,且A+B+C<100,求满足 1 A 2 + 1 B 2 = 1 C 2 \frac{1}{A^2}+\frac{1}{B^2}=\frac{1}{C^2} A21+B21=C21的解共有多少组。
for A in range (1,100):
for B in range(1, 100):
for C in range(1, 100):
if A>B>C:
if A+B+C<100:
if 1/(A*A)+1/(B*B)==1/(C*C):
print(A,B,C)
结果演示:
20 15 12
40 30 24
6.已知 f ( t ) = c o s t + 4 s i n ( 2 t ) + 5 f(t)=\sqrt {cost+4sin(2t)+5} f(t)=cost+4sin(2t)+5,利用矩形法和梯形法求 s = ∫ 0 2 π f ( t ) d t s=\int^{2\pi}_{0}f(t)dt s=∫02πf(t)dt。
#矩形法
import math
n=100 #分成100份
a=0 #上限
b=2*math.pi #下限
s=0 #面积
d=0 #边长
w=(b-a)/n
for i in range(1,101):
d=i*w
s+=math.sqrt(math.cos(d) + 4 * math.sin(2 * d) + 5)*w
print(s)
#梯形法
import math
n=100 #分成100份
a=0 #上限
b=2*math.pi #下限
s=0 #面积
d=0 #边长
w=(b-a)/n
for i in range(1,101):
d=i*w #右横坐标
D=(i-1)*w #左横坐标
s+=((math.sqrt(math.cos(d) + 4 * math.sin(2 * d) + 5))+(math.sqrt(math.cos(D) + 4 * math.sin(2 * D) + 5)))*w/2
print(s)
结果演示:
13.261247839372379
13.261247839372386
7.用牛顿迭代法求方程 e − x − x = 0 e^{-x}-x=0 e−x−x=0在 x = − 2 x=-2 x=−2附近的一个实根,直到满足 ∣ x n + 1 ∣ − ∣ x n ∣ ≤ 1 0 − 6 \lvert x_{n+1}\rvert-\lvert x_n\rvert\leq10^{-6} ∣xn+1∣−∣xn∣≤10−6为止。
import math
def f(x):
return(math.exp(-x)-x)
def g(x):
return(-(math.exp(-x))-1)
x=-2
while (1):
a=x
x=x-f(x)/g(x)
if (abs(x-a)<(1e-6)):
break
print(x)
结果演示:
0.5671432904097837
8.设 f ( x ) = x 3 − a f(x)=x^3-a f(x)=x3−a,用牛顿迭代法推导方程 f ( x ) = 0 f(x)=0 f(x)=0的根的迭代公式,显然方程的根为 x = a 3 x=\sqrt[3]{a} x=3a,据此可以得到求 a 3 \sqrt[3]{a} 3a的迭代公式。从键盘输入a,利用迭代公式求 a 3 \sqrt[3]{a} 3a,其中初始值 x 0 = a x_0=a x0=a,误差要求 1 0 − 5 10^{-5} 10−5。
a=int(input("请输入a值:"))
def f(x):
return(x**3-a)
def g(x):
return(3*(x**2))
x=a
while (1):
b=x
x=x-f(x)/g(x)
if (abs(x-b)<(1e-5)):
break
print(x)
结果演示:
请输入a值:27
3.0