输入一个正整数n,求解并输出1~n之间能被3整除、但不能被7整除的所有整数之 和。
时间: 2024-05-29 17:09:36 浏览: 108
判断每个输入的数是否可被3,5和7整除,并将整除状态输出。
算法1:循环遍历
1. 循环遍历1~n之间的所有整数
2. 判断该整数能否被3整除且不能被7整除
3. 若符合条件,则将该整数加入到结果中
4. 最终返回结果的和
时间复杂度:O(n)
Python 代码:
def sum_of_nums(n):
result = 0
for i in range(1, n+1):
if i % 3 == 0 and i % 7 != 0:
result += i
return result
测试代码:
print(sum_of_nums(10)) # 9
print(sum_of_nums(20)) # 18
print(sum_of_nums(30)) # 54
算法2:数学公式
1. 求出1~n之间能被3整除的所有整数之和,即3+6+9+...+3k
2. 求出1~n之间能被7整除的所有整数之和,即7+14+21+...+7k
3. 求出1~n之间能同时被3和7整除的所有整数之和,即21+42+...+21k
4. 最终结果为1~n之间能被3整除、但不能被7整除的所有整数之和,即第1步的结果减去第2步的结果再加上第3步的结果
时间复杂度:O(1)
Python 代码:
def sum_of_nums(n):
sum_of_3 = (n // 3) * (3 + n // 3 * 3) // 2
sum_of_7 = (n // 7) * (7 + n // 7 * 7) // 2
sum_of_21 = (n // 21) * (21 + n // 21 * 21) // 2
return sum_of_3 - sum_of_7 + sum_of_21
测试代码:
print(sum_of_nums(10)) # 9
print(sum_of_nums(20)) # 18
print(sum_of_nums(30)) # 54
阅读全文