Project Euler 29

本文通过手工计算和Python编程两种方式解决了一道关于数字出现次数的问题。文章详细记录了手动推导的过程,并通过Python代码验证了计算结果的准确性。

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

这道题我是用数学方法做的……手算的~


我承认是从答案推导了验证了手算答案的正确性……


显然这道题就是用剔除的方法。


显然2的出现有2^2,2^3,2^4,...,2^100

3的先跳过,看4的

4 = 2^2,出现了2^4,2^6,2^8,...,2^200,其中有多少是和2的重复呢?显然是100/2 - 2 +1

100/2是再算偶数个数,(-2+1)是因为从^2开始2,3,4,...,50,总共49个数。

3和9也是这个关系

10和100也是这个关系

2和8也是这个关系,32个重复


以此类推,可以算出

2:49+32+24+19+15

3:49+32+24

4:49+32

5:49

6:49

7:49

8:49

9:49

10:49

后面的平方都大于100,不必考虑了。


这些加起来是619,用99*99(总数)-619 = 9182.这个比正确答案少了一个!哪里多减了?


显然16在2^4和4^2处都进行了重复处理

32,64,81也是……

这肿么办……


那我们一点点容斥原理算吧……


先分析16:2^4处,-24,  4^2处,-49。2^4的24个全部重复……


想到8还有跟16重复的部分……


我实在不想写了……


4 --> 49

8 --> 49

9 --> 49

16 --> 58*****

25 --> 49

32 --> 48

36 --> 49

49 --> 49

64 --> 62*****

81 --> 58*****

100 --> 49

It seems that all squares have 49 occurences and all fourth powers have 9 occurences.

其实有所不同的就上面加星号的几个……手算真的能出来……

直接上python吧……

python实在太过强大……哎……python太强大……太……强大……强……大……


s = {1}
for a in range(2, 101):
	tmp = a
	now = 0
	for b in range(2, 101):
		tmp *= a
		if tmp in s:
			pass
		else:
			now += 1
			s.add(tmp)
	print(a, now)
print(len(s))

这个代码就是为了验证我的想法写的……重复的并不难找……但是问题就是……不好说明……还是直接代码吧……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值