这次《非诚勿扰》男生的命运完全靠他的聪明才智,不再只是拼颜值。情况是这样的:在节目现场有100盏灯,每盏灯都给了编号,分别为从1到100。每盏灯由一个美女嘉宾来控制。美女嘉宾按一下开关,灯就亮了,再按一下灯就灭了。美女嘉宾也给了编号,她们的编号与被控制的灯的编号相同。
开始时,灯是全灭的。主持人孟非宣布将按照以下规则让美女嘉宾来决定他的命运。紧张时刻,马上开始。
第一回合,所有美女嘉宾按一下开关,这时,所有的灯都亮了。男生大喜,俨然成了亮灯帝。
第二回合,所有编号为2的倍数的美女嘉宾按一下开关。男生心一沉,怎么一半的灯灭了。
第三回合,所有编号为3的倍数的美女嘉宾按一下开关。男生纳闷,怎么有的灯亮了,有的灯灭了。
如此反复。
第N回合,所有编号为N的倍数的美女嘉宾按一下开关。
这时,主持人孟非问男生,在第100回合后,还能虏获多少美女嘉宾的芳心?也就是说,节目现场还有多少盏灯是亮着的?
男生出乎意料,以前《非诚勿扰》都是靠颜值吃饭,怎么今天轮到他要靠智商吃饭了。
还好,男生是一个聪明的程序猿,当场用的编程本领来俘获美女嘉宾的芳心。
首先,他想到了暴力破解,而且当场在白板上写出了代码。
。。。怎么写。。。
//初始化v数组0代表灯是关的,1代表是亮的
for (int i=1; i
v[i]=0;
}
//i 代表第i个人,j代表第j盏灯
for (int i=1; i
for (int j=1; j
if (j%i==0) { //此时第i个人应该拉一下第j盏灯
v[j] = 1 - v[j];
}
}
//最终看一下v[i]里的值,即可得到灯的状态
int total = 0;
for (int i=1; i
if (v[i] == 1) total++;
}
写完代码,男生获得全场掌声,虽然很多的美女嘉宾不知所云。看着那些满脸疑惑的众多美女嘉宾,男生的必须想出更美妙的方法来征服他们。
。。。怎么更好。。。
男生在代码中加了一个printf,打印出那些亮灯的美女嘉宾的编号,看了看结果,好像找出规律了。怎么全是100以内的完全平方数:1,4,9,16,25,36,49,64,81,100,难道只有完全平方数被拉了奇数次?
。。。好神奇。。。
男生心想,还真是,为什么只有完全平方数被拉了奇数次?
善于逻辑分析的他开始琢磨了。
任何一盏灯的最后状态和它被美女嘉宾按开关的次数有关。那么,一盏灯被按开关的次数又和什么有关呢?
。。。冥想中。。。
他脑海中闪现灯和第i个美女嘉宾的对话
灯:你干嘛按我的开关?
第i个美女嘉宾: 因为我喜欢你呀,不不不,是因为你是我的倍数啊
恍然大悟!一个灯被按开关多少次,要看它是多少个美女嘉宾编号的倍数,那也就是说要看它有多少个因数。
到了这里,这个问题就完全转化成了一个数学问题:一个数的因数有多少个?
。。。冥想中。。。
这里比较关键的一步来了,需要一点点数学功底,任何一个自然数有且只有一种质因数分解的形式:
N = a1的b1次方乘以a2的b2次方一直到an的bn次方,a1,a2,an为质因数,b1,b2,bn为对应的质因数的次幂
然后呢?千万别懵逼,继续思考,上面质因数的分解的形式和一个数的因数的个数有什么关系呢?
恩,这里需要一点数学的方面的灵感了。每一个因数都要从a1,a2....an里选,那a1有几种可能呢?显然是0-b1种可能, an是0-bn种可能。0代表这个质因数没有被选。
举个例子,12 = 3*2*2 那么a1=3,b1=1,a2=2,b2=2。那么12个因数的个数为(b1+1)(b2+1)=(1+1)(2+1)=6,也就是说,12的6个因数分别是:1,2,3,4,6,12
所以得到更一般的形式,N的因数的个数为(b1+1)(b2+1)......(bn+1)
那么怎么判断(b1+1)(b2+1)......(bn+1) 的奇偶性呢?只有当b1,b2.....bn都为偶数的时候结果才为奇数!!!而b1,b2.....bn都为偶数,不正是,N是完全平方数。
迎刃而解!原来数学知识这么的有趣,尤其是数学能吸引美女的时候。
到此为止,虽然只有编号为完全平方数的灯亮着,但是男生的现场编码技能和聪明才智已经点亮了所有美女嘉宾的内心的那盏灯。
大家可能还感兴趣:
谢谢。