Project Euler 26

本文深入探讨了一个寻找具有特定条件的最长循环节的问题,并通过数学推理和编程实现验证了结论。首先,文章指出对于不包含因子2和5的素数,其对应的分数通常具有最长的循环节。接着,通过代码实现验证了这一理论,并成功找到了满足条件的最大素数983。整个过程展示了数学与计算机编程在解决实际问题时的巧妙结合。

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

大早上起来……做题折磨自己~下午还有quiz……T_T


好,这道题是要求d<1000, 1/d的最长循环节,我上来想了一下,就直接试了试最大的素数997, 显然不对了……


然后想啊想,就是想不出来……就百度了一下最长循环节……竟然出来了这道题的讨论……这不科学……

不过里面推荐了

有关循环小数的趣味数学题

好东西啊!我看到里面最让我感动的两句话
一是关于分母中含有2,5这两个因子,那么小数要么不是循环小数(只含2,5),要么就是混合无限循环小数(2,5和其他素数混合)
二是数字p的循环节长度,要么是p-1,要么是(p-1)的因数

前一个是很对的,很靠谱,很有用。运算的时候就可以先把2,5两个因子剔除掉,只算不含2,5的(因为只要求最长循环节嘛!)。
后一个就不是很靠谱……有的时候是÷6,有的时候÷4,÷3,÷2,都不一定……让我非常捉鸡……

总之,看到答案是983,我们就来试试
一下全是不合理的推测……
首先猜测肯定是素数!
其次肯定偏大,那就从1000往下找。
997已经被排除……(我的猜测是997-1 = 996 996÷2 ÷ 3 都能除尽,不符合最优(虽然我也不知道什么事最优)的……)
991这玩意减一后990,感觉更不靠谱……
987(这个不是个素数……不管它了)
983,减一,982÷2 = 491,乍一看不能被2除,不能被3除,不能被5除……嗯……就是答案吧……

不过可不能就这么蒙混过关……

写个代码看看……


对了,这里有之前写的为了找规律的代码
for i in range(1, 30):
	print('{}  {:.22f}\n'.format(i, 1.0/i))

显然我又图样了,因为python的float类型……后面精度相当不够的!很多都看不出循环节~

后来我真写了个代码(抄的),来验证自己的stupid……
def calc(n):
	for i in range(1, n):
		if 10**i%n == 1:
			return i

for i in range(1001, 900, -1):
	if (i%5 != 0) and (i%2 != 0):
		print(i, ",", calc(i))

这个想法挺对的!就是10**i 如果除以 n 余数是 1,那么就说明这个是个循环节了!
哎……我怎么就想不到呢……一直在考虑如何算长短……其实主要在想数学方法……

然后上面这个代码验证了我多图样……我就不说了。
修改一下可以直接出结果,比如加个list,加个max……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值