好久不来了,凑个热闹.
思路:
1.要知道灯的状态,就是要知道这个灯被开关了是奇数次还是偶数次,亮着的灯一定是奇数次.
2.某编号的灯的开关次数就是这个数有多少个约数.
3.所以本题归结为计算某个数约数个数的算法问题,即是算法题.
4.某个数如果不是完全平方数,那么这个数的约数是偶数,完全平方数的约数个数是奇数.
5.所以1-256内是完全平方数编号的就是亮着的灯.即求出1-256内完全平方数即可.
这是因为:约数就是2个数的积等于这个数,如果不是完全平方数 那么,他的约数就肯定是2的倍数.而如果这个数是完全平方数,虽然他的约数总的也是2的倍数 但是,他有2个数是相等的 即他的开方的那个数.如 16的开方数是4,他的总的约数有1 2 4 4 8 16(1*16,2*8,4*4),共有6个约数,有2数是相同的,所以,他的约数共有6-1=5个,即为奇数.
本题答案:
下拉普通公式26个字符:
=TEXT(ROW(A1)^2,"[<257];")
多单元格数组公式43个字符:
=TEXT(SMALL(ROW(1:29)^2,ROW()-1),"[<257];")
下面附一个硬算的公式(长70),即算出完全平方数(上面2个公式是直接使用完全平方数):
=TEXT(1/SMALL(IF(LEN(ROW(1:256)^0.5)>2,1,-1/ROW(1:256)),ROW()-1),";0")
再附一个计算出开关次数的公式(长95):
=TEXT(1/SMALL(-1^MMULT(N(MOD(ROW(1:256),COLUMN(1:1))=0),ROW(1:256)^0)/ROW(1:256),ROW()-1),";0")
附,约数个数及约数之和求法,供对算法感兴趣的参考:
16=2x2x2x2=(2^4)
所以16约数的个数:(1+4)=5
所有约数的和:(2^0+2^1+2^2+2^3+2^4)=31
240=2x2x2x2x3x5=(2^4)x3x5
所以240约数的个数:(1+4)(1+1)(1+1)=20
所有约数的和:(2^0+2^1+2^2+2^3+2^4)*(3^0+3^1)*(5^0+5^1)=(1+2+4+8+16)(1+3)(1+5)=744
解释:240的质因数有2,3和5 ,即240的约数由质因数2,3,5构成,其中因数2可能出现0个,1个,2个,3个,4个,共5种情况;因数3可能出现0个,1个,共2种情况;因数5可能出现0个,1个,共2种情况。所以,240的约数个数为5x2x2=20个
1998=2x3x3x3x37 =2^1x3^3x37
约数有:(1+1)x(3+1)x(1+1)=16个
约数和:(2^0+2^1)*(3^0+3^1+3^2+3^3)*(37^0+37^1)=4560 |