这道题我是用数学方法做的……手算的~
我承认是从答案推导了验证了手算答案的正确性……
显然这道题就是用剔除的方法。
显然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))
这个代码就是为了验证我的想法写的……重复的并不难找……但是问题就是……不好说明……还是直接代码吧……