不能使用114514表示的最小正整数是多少?

发布时间:
2024-10-15 00:40
阅读量:
13

109。

没有数学证明,因为看到这种题就想要写程序。

Python代码:

import itertools def generate_exprs(nums, ops): if len(nums) == 1: yield nums[0] if nums[0] != '0': yield f"-{nums[0]}" else: for i in range(1, len(nums)): for left in generate_exprs(nums[:i], ops): for right in generate_exprs(nums[i:], ops): for op in ops: yield f"({left}{op}{right})" def can_represent(target): nums = ['1', '1', '4', '5', '1', '4'] ops = ['+', '-', '*', '/'] num_parts = [] for length in range(1, len(nums) + 1): for split in itertools.combinations(range(1, len(nums)), length - 1): num_parts = [] prev = 0 for i in split: num_parts.append(''.join(nums[prev:i])) prev = i num_parts.append(''.join(nums[prev:])) for expr in generate_exprs(num_parts, ops): try: if eval(expr) == target: print(f"{target} -> {expr}") return True except ZeroDivisionError: continue except Exception as e: print(f"Error evaluating {expr}: {e}") continue print(f"{target} is it.") return False n = 1 while can_represent(n): n += 1

输出:

1 -> (11/((45-1)/4)) 2 -> (11-(45/(1+4))) 3 -> ((11*(4-5))+14) 4 -> ((11+45)/14) 5 -> (1*(14+(5-14))) 6 -> (114/(5+14)) 7 -> (1+(1-(4+(5-14)))) 8 -> (1+(1+((4*5)-14))) 9 -> (((1-1)*4)-(5-14)) 10 -> (1*(1+(45/(1+4)))) 11 -> (1*(((1+4)*5)-14)) 12 -> (1+(((1+4)*5)-14)) 13 -> (1-(1-(4-(5-14)))) 14 -> (((1-1)*45)+14) 15 -> ((114/(5+1))-4) 16 -> (11-(4+(5-14))) 17 -> (((1+14)/5)+14) 18 -> ((1+(1-4))*(5-14)) 19 -> (((1-1)*4)+(5+14)) 20 -> (11+(45/(1+4))) 21 -> (((11-4)*5)-14) ... 82 -> ((1+1)*(45-(1*4))) 83 -> (-1+(14+(5*14))) 84 -> (1*(14+(5*14))) 85 -> (1+(14+(5*14))) 86 -> ((1+1)*(-4+(51-4))) 87 -> (11+(4*(5+14))) 88 -> (((1+1)*(45+1))-4) 89 -> (((1+14)*5)+14) 90 -> (-114+(51*4)) 91 -> ((11*4)+(51-4)) 92 -> (((1+1)*(45-1))+4) 93 -> (((1+1)*45)-(1-4)) 94 -> (114-(5*(1*4))) 95 -> (114-(5+14)) 96 -> (1+((1+4)*(5+14))) 97 -> (1*(1+(4*((5+1)*4)))) 98 -> (114-((5-1)*4)) 99 -> ((11*4)+(51+4)) 100 -> ((1+1)*(45+(1+4))) 101 -> (1*(1+(4*(5*(1+4))))) 102 -> ((11-45)*(1-4)) 103 -> ((11*(4+5))+(1*4)) 104 -> (((1+1)*45)+14) 105 -> (114+(5-14)) 106 -> (114-(5-(1-4))) 107 -> (11+(4*((5+1)*4))) 108 -> ((11+(4*(5-1)))*4) 109 is it.


我有一个同学,非常非常迷恋做数学题。

一次我突发奇想,问了他一道题(和质数相关),和你格式差不多,都是类似“存不存在……的最小正整数?如果存在,是多少?”

然后他看了两眼,问我“你这里面质数是按顺序还是不按顺序的?”

我说按顺序。

他又看了看题,看了看我:

“这不是计算机题吗?”


2024.8.24 17:01 二编
主要更新:改了Python程序逻辑,加了把两个数字拼在一起;但问题中没有提到负数,所以并没有添加正数改负数的逻辑。

2024.8.24 18:27 三编
主要更新:改了改Python,加了负数。十分感谢 @比那名居天子 每次都能举出反例让我改代码。

2024.9.17 正好有109个赞同,好耶——

END