丁丁猫python课程解决初高中数学、物理真实任务为特色,突出python语言的高效用法。每个课题任务完整地学习:
如何换编程的思路重新描述数学问题?
如何验证编程逻辑是否严密?
如何对程序做边界测试
*第3点实际项目中侧重对求职面试考察重点
覆盖7个大模块,每个模块文末详细技能知识点。3个班的进度相同但讲的深度不同。课程设计中将感受到对逻辑课的高度重视,弥补国内K12编程和数学课程缺少的重要一环。
**- **编程和机器人穿插必数学和物理
**- **全球顶级的STEM在线课程提供线下辅导
**- ** 既能视频一对一学习,也有线下授课
SaltVikki Leigh - 100% Top Hits, Vol. 29
现在第一个同学关掉第2,4,6,...每次隔1个灯,直至他走到走廊尽头;
第二个同学关掉3,6,9,...每次隔2个灯,直至他走到走廊尽头;
以此类推,直至第n-1个同学,每隔n-1个灯,直至走到走到尽头;
问最后还有哪些灯还是亮着的?
直觉是和数论中的求因数的规律有关
''' 先找规律
2,4,6,8,10 ...
3,6,9,12,15 ... # 4,8,12,16,20 ... 4号又亮
5,10,15,20,25 ... # 6,12,18,24,30 ... # 7,14,21,28,35 ...
8,6,9,12,15 ... # 9,8,12,16,20 ... 9号又亮了
10,10,15,20,25 ... # 11,12,18,24,30
... 由此推断出依然亮着灯是:****1、4、9、16****以下所有分析建立在一个基本原理:任意合数可以表达为若干质数相乘</article>
一个合数如 6=23,由2,3两个质数可以相乘后得到6的所有因子****即对{2,3}做组合,C(1,2) + C(2,2) = ****{2,3,6}****对应的场景是,共有*3个同学会进过第6盏灯。
最终第6盏灯会被开关3次,分别是第2、3和6个同学,所以第6盏灯最后的状态是关闭,因为第7个同学和以后的所有同学都不会在触动第6盏灯的开关了。
继续以上推理,一个正整数n有x个因子,当x=2m个即偶数时,第n个灯经过偶数次的切换必然还是亮灯的状态,最后该第n-1个同学,他上来就将第n个灯关闭,共有2m+1次触碰开关 ;当n包含有奇数个因子时,2m+1+1 = 2(m+1), 共有偶数次触碰开关,所以第n个灯还是亮灯的状态;请在此处深度思考。
问题转换为:n分解为多少个因子,并判断质因子的数量是奇数还是偶数?例如:6有两个因数2和3,加上6,共有3次触动开关;7就只有1次,7是素数,没有因子,共1次;8有因数是2,4,8,共3次;12 ={2,3,4,6,12}共5次;
以上4种情形灯光最终都停留在关闭状态 对问题的表述继续简化直达本质:任意一个整数n,一定能表达为若干个素数相乘,如6=23, 8=222那么,n的因子的数量就能表达为所有质数因子集合prime,对prime内的元素做组合,就能得到该整数n的所有因子。所有因子的数量是奇数,则灯光与初始状态相反;如果因子的数量为偶数,则灯光与初始状态相同!****任意找一个合数n=2357 = 210,那么p = {2,3,5,7}有多数种组合?**
排列组合中的组合运算表达:C = C1 + C2 + C3 + C4 ,p=4对称性推断:C1==C3,C4=1, 故此 只需判断C2的奇偶,此处细品以下不失一般性推广到n的素因子数量为偶数的情形,p是素因子的数量关键证明步骤之一:P是偶数时,判断C(P/2) 的奇偶性(P * (P-1)(P-2) ... (P/2+1)) / ((P/2) * (P/2-1)* ... ...1)P = 2(P/2)P-2 = 2*(P/2-1).... ...
最后结果一定能表达为:2X,无论X的奇偶,2乘以X都是偶数。关键证明步骤之二:P是奇数时,判断C的奇偶性*P是奇数时,由于C=C1+C2....+CP, 去掉CP==1容易得出:
C1+C2....+CP-1 :p-1偶数,有前面论证过对称性可得出C一定是偶数综上所述:合数n的质数因子的个数P,无论P是奇数还是偶数,C都是偶数!****例-1:8=222,prime={2,2,2}包含的元素做组合共有:****2,42,81,共有3种组合结果,因此第8个同学经过第8个灯后,灯保持在开的状态。****例-2:12 = 223,prime={2,2,3}包含的元素做组合元素后共有:**
2(23),3(22),22(3), 23(2) 共4种组合结果,再将12本身算入,共有5个因数{2,3,4,6,12}, 是奇数次开关,所以第12个同学经过第12个灯后,灯是灭的。因为5是奇数,灯的状态一定不同于初始的亮灯状态。问题分析到此是否真的解决了呢?没有!
考虑到质因子有重复出现的情况,还需要继续在以上证明结论的基础上,解决下面子问题:合数n有P个质因子,其中有重复出现的因子,如例-1和例-2 2 **合数的素因子有重复出现时,组合****结果****还是偶数吗?
****关键证明步骤之三:任意合数n,如含有重复出现的质数因子,我们可以表达为:
prime 是n的所有质数因子的集合且做去除重复元素的操作: python的set()函数操作后:n=8时,223,去重后 prime = {2}
n=36时,prime={2,3}任意合数n有P个质数因子,进过元素去重后操作后:set(p)是全都不同的质数因子的集合。重复部分的因子组成另一个集合设为 Q,
显然 set(Q) <= set(P)前面关键步骤一和二已经证明合数n含有全不相同的质数因子,无论质因子的数量是奇数还是偶数,组合结果的数量都是偶数,又因为质数因子全都不相同,组合乘积的结果也都不同,这里假设set(p)集合里的所有元素相乘的结果为m
m必为偶数。
那么,我们定义合数n和它所有质因子组合结果总数为F(n) , 同时又由于set(q)包含的都是质数,m到n有新增的组合关系成立:F(n) == m * F(Q)****由此可见,********F(n) == F(m),************理由是偶数无论乘以奇数还是偶数************,****奇偶性不变。****even * odd = even ****even * even = even 但有而且只有一个例外情况:********Q == P 时,******F(P) ==******F(Q) ************************************由此推导可得:************************F(n) == m * m************这意味着,当n == mm时,第************m************个同学还有机会经过第n个路灯。这样就打破了******F(n)的奇偶性**************当p=4时,还有一种情况如:36 = 2323,prime={2,2,3,3}包含的元素做组合元素后共有:****C1=C3=4
C2= 43/21 = 6C4=1
C=C1+C2+C3+C4=11,但由于有重复的因子导致有重复的组合结果,最终组合结果枚举:
2(323),*
3(223)*
22(3*3), **
****23(2*3)****
33(2*2), **
223***(3)****
332(2)*
232*3 **
共计8种组合结果, ****共有8个因数{2,3,4,6,9,12,18,36}, 8是偶数。偶数次开关,所以灯是亮的。******综上所述:** - 首先,n是质数时,灯灭;- 其次,n是合数而且n不是完全平方数时,灯灭; n以内的数中,只有满足是完全平方数的灯是亮的算法效率讲,以上是效率最高的'''*Python *实现n以内的完全平方数 </article>
def on_off_switch(n):
return [i * i for i in range(1, int(n ** 0.5) + 1)]