# P31: 硬币求和
Coin sums
英国的货币单位包括英镑 £ 和便士 p, 在流通中的硬币一共有八种:
以下是组成 £2 的其中一种可行方式:
不限定使用的硬币数目, 组成
这么久终于有要用到点数学的题目了, 经典的生成函数应用.
m = {1, 2, 5, 10, 20, 50, 100, 200};
Coefficient[Series[1 / Product[1 - x^m[[i]], {i, 8}], {x, 0, 200}], x^200]
# P32: 全数字的乘积
Pandigital products
如果一个
例如, 五位数
找出所有被乘数, 乘数和乘积恰好是
注意: 有些乘积可能从多个乘法等式中得到, 但在求和的时候只计算一次.
先来个判定函数 fooQ 来筛选那些乘数被乘数乘积 1-9 全数字的.
这个式子的两个乘数也不会很大.
两位数乘以三位数等于四位数, 或一位数乘以四位数等于四位数, 大的叫
fooQ = Union[IntegerDigits[#1], IntegerDigits[#2], IntegerDigits[#1 #2]] == Range[9]&;
Total[Union@@Table[If[a * b <= 9999 && fooQ[a, b], a * b, 0], {a, 100, 9999}, {b, 1, 99}]]
# P33: 消去数字的分数
Digit cancelling fractions
我们也会想到, 存在诸如
这类有趣的分数恰好有四个非平凡的例子, 它们的分数值小于
将这四个分数的乘积写成最简分数, 求此时分母的值.
也就是解方程
\begin{cases} &b = c\\ &\dfrac{10a + b}{10c + d} = \dfrac{a}{d} < 1\\ &0 < a,b,c,d \in N < 10 \end{cases}
然后转换成代码.
其实... 唔... 我每次都要这么插一句话的原因是公式不能直接连代码高亮器, 否则会被转译, 要加一句废话当分隔符.
FindInstance[(10 a+b)/(10 c+d)==a/d<1&&b==c&&0<a<10&&0<b<10&&0<c<10&&0<d<10,{a,b,c,d},Integers,4]
# P34: 各位数字的阶乘
Digit factorials
找出所有各位数字的阶乘和等于其本身的数, 并求它们的和.
注意: 因为
和 30 题思路差不多吧, 找上界, 穷举, 直接把代码搬过来改一下就能用了.
fooQ = Total[(IntegerDigits@#)!] == #&;
max = First[n /. NSolve[{10^n == 9!n, n > 1}, n]];
Total[Select[Range[10, Floor[10^max]], fooQ]]
# P35: 圆周素数
Circular primes
小于
小于一百万的圆周素数有多少个?
才一百万? 不如穷举.....
都是一个思路, 写个判定函数, Select... 写了好几遍了.
fooQ := # == NestWhile[RotateLeft, #, PrimeQ[FromDigits[#]]&, 1, Length[#]]&;
Length@Select[IntegerDigits[Array[Prime, PrimePi[10^6]]], fooQ]
# P36: 双进制回文数
Double-base palindromes
找出所有小于一百万, 且在十进制和二进制下均回文的数, 并求它们的和.
注意: 无论在哪种进制下, 回文数均不考虑前导零.
又是判定加 Select.... 唉... 套路, 都是套路
Total@Select[Range[10^6], IntegerDigits[#, 2] == Reverse[IntegerDigits[#, 2]] && IntegerDigits[#] == Reverse[IntegerDigits[#]]&]
# P37: 可截素数
Truncatable primes
不仅它本身是一个素数, 而且如果从左往右逐一截去数字, 剩下的仍然都是素数:
同样地, 如果从右往左逐一截去数字, 剩下的也依然都是素数:
只有
注意:
郁闷, 我想了下我没法证明只有
反过来做呗, {2,3,5,7}
往左加一位就是 {13, 23, 43, 53, 73, 83, 17, 37, 47, 67, 97}
;
往右加一位就是 {23, 29, 31, 37, 53, 59, 71, 73, 79}
;
然后在这个基础上再构造.
别问我为啥只要是
除非我能想明白为啥只有
Intersection 取交集, Total 加起来, 最后减去 {0,2,3,5,7}
这 5 个.
fooQ[a_, b_] := Select[Plus@@@Tuples@{# a, b^#2 Range@9}, PrimeQ]&;
PrimeList[x__, n_] := Drop[Join@@FoldList[fooQ@x, {0}, 0 ~ Range ~ n], 2];
Tr[Intersection[PrimeList[1, 10, 5], PrimeList[10, 1, 5]]]
# P38: 全数字的倍数
Pandigital multiples
将
连接这些乘积, 我们得到一个
我们称
同样地, 将
对于
穷举..... 然后又是 Select 判定.....
我们所要寻找的答案至少要大于题目给出的那个数
然后因为
fooQ = Sort@(IntegerDigits[#] ~ Join ~ IntegerDigits[2 #]) == Range[1, 9]&
list = Select[Range[9000, 9999], fooQ]
Row[Join@@IntegerDigits[Max@list {1, 2}]]
# P39: 整数边长直角三角形
Integer right triangles
设三边长
在所有的
解个方程的事儿.
$$\begin{cases} a^2 + b^2 = c^2\ p = a + b + c\ p > c > b > a > 0\ \end{cases}\$$
解得:
$$\begin{cases} 0 <a \leqslant \left\lfloor {p - \dfrac{p}{\sqrt 2 }} \right\rfloor\ b = \dfrac{p(2a - p)}{2(a - p)}\ \end{cases}\ $$
翻成代码:
a = Floor[p(1 - 1 / Sqrt[2])];
b[a_, p_] := Table[(2i - p)p / (2i - 2p), {i, 1, a}];
Last@Ordering@Table[Total@Boole[IntegerQ /@ b[a, p]], {p, 1, 1000}]
# P40: 钱珀瑙恩常数
Champernowne's constant
将所有正整数连接起来构造的一个十进制无理数如下所示:
如果
我选择直接数...
Times@@RealDigits[ChampernowneNumber[10], 10, 10^6][[1, 10^Range[0, 6]]]
连续计时 10 分 54 秒, 没有压进 10 分钟有点遗憾.....
思路倒是不难找, 就是比如 P38 这种题真是阅读理解...
← Level21-30 Level41-50 →