记得上小学时,只要是分数计算的场合,老师总是重重的敲着黑板:“先约分,再计算,记住没有?”
再大些,当发现和9.8(重力加速度)很接近时,感觉自己似乎抓到了世界的真理。
上了大学、工作,依然时不时的被幅频特性方程之类的多项式相除的式子支配。
这两天准备搞一个简易的轮子,需要在程序中计算输入参数上下能被除尽的数。
心情十分激动,计划拿这个问题祭旗,疏解一些几十年被因式分解时不时骚扰的苦闷。
一、编写判断一个数是否能被1除尽的函数。
简单,如果这个数只有因子2和5,再没有其他因子,则该数一定能被1除尽。
def isPure(val:int,divisor1:int,divisor2:int ) -> bool:
res =False
divisor=1
while(1):
if val%divisor1 ==0:
divisor=divisor1
elif val%divisor2 ==0:
divisor = divisor2
elif val==1:
res = True
break
else:
res = False
break
val =val//divisor
return res
调试通过,完美!
二、输出2到10的n次方之间所有能被1除尽的数。
有追求的人,从来不满足于一点点小的成功,看我彻底把你研究明白。嗯!
第一步:找到2到10的n次方的所有能被1除尽的数
第二步:分析从10的n-1次方到n次方之间有多少个数,感受一下数据分析人员的快感。
list1=list() #存储这些数
#百度丑数计算,数组初始化为2,4,5;然后让内部的最后6个数乘以2,4,5,找到比最后一个大的最小3个。插入数组,反复进行。可能会更快。
for i in range(2,1000000+1):
if isPure(i,2,5):
list1.append(i)
N= int(np.log10(list1[-1])+1)
print(list1)
k=0 #list元素序号
kk=1 #段内多少个
for i in range(1,N+1):
while(1):
if(k>=len(list1)): break
if list1[k]>=10**i:
print(i,kk,list1[k])
kk=0
break
kk =kk+1
k = k+1
10的6次方,不小了把。额,输出好像有点慢。。。
[2, 4, 5, 8, 10, 16, 20, 25, 32, 40, 50, 64, 80, 100, 125, 128, 160, 200, 250, 256, 320, 400, 500, 512, 625, 640, 800, 1000, 1024, 1250, 1280, 1600, 2000, 2048, 2500, 2560, 3125, 3200, 4000, 4096, 5000, 5120, 6250, 6400, 8000, 8192, 10000, 10240, 12500, 12800, 15625, 16000, 16384, 20000, 20480, 25000, 25600, 31250, 32000, 32768, 40000, 40960, 50000, 51200, 62500, 64000, 65536, 78125, 80000, 81920, 100000, 102400, 125000, 128000, 131072, 156250, 160000, 163840, 200000, 204800, 250000, 256000, 262144, 312500, 320000, 327680, 390625, 400000, 409600, 500000, 512000, 524288, 625000, 640000, 655360, 781250, 800000, 819200, 1000000]
1 5 10
2 9 100
3 14 1000
4 19 10000
5 24 100000
6 28 1000000
0-10 是5个,刚开始,有点特殊;2到5,多好,每次加5,完美;为啥5到6是加4啊?
用7试试?
等等。。等等。。。
1 5 10
2 9 100
3 14 1000
4 19 10000
5 24 100000
6 28 1000000
7 34 10000000
加了6,用8试试
等等。。等等。。。等等。。。。等等。。。。。等等。。。。。。
1 5 10
2 9 100
3 14 1000
4 19 10000
5 24 100000
6 28 1000000
7 34 10000000
8 38 100000000
9 42 1000000000
what?难道平均加5?
why?中间加4和加6又是咋回事?程序好慢啊,有啥办法可以把算法加速一些啊,数学和编程果然不适合我!!!
???我轮子去哪里了????
.......