纸笔的力量

本文通过逻辑分析和数学推理解决了Project Euler的第38题,即寻找能构成9位pandigital数的最小整数。通过排除法确定目标数字的范围和特征,最终得出答案为9327。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对Mathematica着迷了,虽然我知道这热情不会持续多久。还是喜欢在解决问题中学习,这次是Project Euler的第38问

提问:一个数依次×1,×2,……把所得连接成一个9位数,如果这个9位数正好是1到9的一个组合,则称其为原数的pandigital数。

回答:

Project Euler Problem 38

这段代码自己都觉得有点对不住观众,于是到论坛去取经。果然又找到了one-liner。

 

不过最让人惊叹的还是占着沙发的老兄,这哥们自豪地写道“我已经用纸和笔解决了”。这是Project Euler界的最高荣誉了。

他这样分析道:

我们已经知道9的pandigital数是918273645了,我们要找的数应该大于等于它。

  • 既然pandigital数是由×1,×2,……连接而来,那么最大的pandigital数必定以9开头(因为它要大于等于918273645);
  • 它不可能是9开头的两位数9[0-9],这种数的pandigital数要么是8位,要么是11位;
    • 它不可能是9开头的三位数9[0-9][0-9],这种数的pandigital数要么是7位,要么是11位;
    • 它不可能大于100,000,这种数的pandigital数位数肯定多于9位;

所以,我们要寻找的数只能是9开头的四位数9[0-9][0-9][0-9]。

  • 它不含0,因为0乘任何数仍为0,而该数的pandigital数只含1到9;
  • 它的各位均不同,否则×1时就会产生相同的数;
  • 它必然不含1,因为×2的时候会产生1,谁让你9打头呢;
  • 它的次高位不会是5以上,因为×2的时候会出现9,与×1的时候的9重复(9[5-9][2-9][2-9]×2 = 19xxx);
  • 它的次高位不会是4,因为×2的时候会出现两个8或者一个9(94[2-9][2-9]×2 = 18[8-9]xx);

现在看来,可能是数只能是9[2-3][2-7][2-7]了。我们试试93[2-7][2-7]:

  • 它的第3位不会是7,因为×2的时候会出现7,与×1时重合(937[2-7]×2 = 187xx);
  • 它的第3位不会是6,因为×1的时候曾出现3,所以×2时不能有进位(936[2-4]×2 = 1872x,x必为偶数,其pandigital数缺5);
  • 它的第3位不会是5,因为×2的时候会出现两个1或者一个0(935[2-7]×2 = 187[0-1]x);
  • 它的第3位不会是4,因为×2的时候会出现两个8或者一个9(934[2-7]×2 = 186[8-9]x);
  • 它的第3位不会是3,因为出现了两个3(933[2-7]);

我们试试9327吧:

9327 × 1 = 9327
9327 × 2 = 18654

就是它了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值