有数列定义为:f(0) = a, f(1) =b,f(n) = f(n-1)+f(n-2), 且0 < a < b < 20.现给出a, b, n,请问f(n)能否被3整除.
时间: 2023-05-31 11:19:09 浏览: 493
计算机数据结构习题1附答案.doc
### 回答1:
题目描述:给定一个数列,满足f(0) = a, f(1) =b, f(n) = f(n-1)+f(n-2),且 1 < a < b < 20。现给出a,b,n,请计算f(n)是否能被3整除。
解答:根据题意,先求出数列中的前n项,然后判断f(n)是否能被3整除即可。可以使用循环或递归的方式实现。
循环实现:
```
a = 2
b = 5
n = 10
f = [0] * (n+1)
f[0] = a
f[1] = b
for i in range(2, n+1):
f[i] = f[i-1] + f[i-2]
if f[n] % 3 == 0:
print("能被3整除")
else:
print("不能被3整除")
```
递归实现:
```
a = 2
b = 5
n = 10
def fibonacci(n):
if n == 0:
return a
elif n == 1:
return b
else:
return fibonacci(n-1) + fibonacci(n-2)
f = fibonacci(n)
if f % 3 == 0:
print("能被3整除")
else:
print("不能被3整除")
```
### 回答2:
首先可以列出数列的前几项:f(2) = ab, f(3) = b(ab), f(4) = b^2 (a^2 b - 1), f(5) = b^3 (a^3 b^2 - a), f(6) = b^4 (a^4 b^3 - a^2 b - 1),根据数学归纳法可得,当n≥3时,f(n)是由a、b的乘积和前两项的积相乘而成的,也就是f(n) = f(n-1)·f(n-2) = ab·f(n-2),考虑f(n)能否被3整除,可以把问题转化为ab·f(n-2)能否被3整除。显然,当a、b中至少有一个是3的倍数时,ab·f(n-2)一定能被3整除。因此,只需要考虑a、b都不是3的倍数的情况。
如果a、b都不是3的倍数,则它们除以3的余数只能是1或2。假设a≡1(mod 3),则b只能≡2(mod 3),因为如果b≡1(mod 3),则b<a,与题意矛盾;同理,如果b≡1(mod 3),则a必须≡2(mod 3),这样可以保证a<b。因此,可以把问题简化为当a≡1(mod 3),b≡2(mod 3)时,判断f(n-2)能否被3整除。又因为f(0)、f(1)都不是3的倍数,而对于n≥2的情况,f(n)的3次幂因子只有2种:b和a的个数之和的3次幂因子以及b的3次幂因子。因此,只需要说明f(n-2)中是否包含a或b,即可得出答案。
当n=2时,f(2) = ab一定不是3的倍数,因为a、b都不是3的倍数。当n=3时,f(3) = b(ab),此时的b已经是3的倍数,能够被3整除。当n≥4时,f(n-2)中至少包含a或b的1项,因此f(n-2)不能被3整除。
综上所述,只有当a、b中至少有一个是3的倍数时,f(n)能被3整除。
### 回答3:
首先,我们可以通过列出数列的前几项来观察规律:
f(0) = a
f(1) = b
f(2) = a * b
f(3) = b * (a * b) = b^2 * a
f(4) = (a * b) * (b^2 * a) = a * b^3 * a = a^2 * b^3
f(5) = (b^2 * a) * (a^2 * b^3) = a^3 * b^5
可以发现,若a和b都不是3的倍数,则f(n)不可能被3整除。因为数列中每一项的因数都只包含a和b,而它们都不是3的倍数。
若a和b中有一个是3的倍数,则f(0),f(1)和f(2)都是3的倍数。此后,数列中每一项的因数都包含3,因此f(n)也是3的倍数。
此外,若a和b中有一个是3的倍数,另一个为非3的倍数,则f(0)和f(1)都是3的倍数,但f(2)不是。而之后的数列中,每一项都是前两项的积,因此它们的因数中必定含有不为3的因子,因此f(n)不可能被3整除。
因此,总结来说,当且仅当a和b中至少有一个是3的倍数时,f(n)才能被3整除。
阅读全文