目录
1.1升无刻度盒子
2.脑筋急转弯:三个开关三个灯
3.400米环形跑道_顺逆时针来回跑问题
4.一天24小时内,钟表的时针、分针、秒针会重合几次?2次
4.2钟表的时针、分针会重合几次?22次
5.大于6的连续三个整数,其中两个是质数,另一个一定可以被6整除
5.1.判断一个数是否为质数
5.2判断两个数是否互质
5.3求两个数的最大公约数
有一个没有刻度的长方形的塑料盒子,没有盖子,它的容积是1升。请问如果只能使用这个盒子称量一次,能够准
确地量出多少升的水? A.0.4升 B.0.5升 C.0.8升 D.0.3升
如果只能使用这个盒子称量一次,能够准,确地量出0.5升的水
增加信息,熵增!
先打开第一个开关,开几分钟,然后再开第二个开关,这个时候可以进屋了,现在所看见正在亮着的灯,很明显是第二开关控制的,然后用手摸一下另外两个灯,有热度的,就是第二个开关控制的,剩下的当然就第三个开关控制的。
李明在四百米长的环形跑道上练习长跑.上午八点二十分开始,李明按逆时针方向出发,一分钟后,李明调头按顺时针方向跑,又过了两分钟,李明又调头按逆时针方向跑.如此,按1、2、3、4……分钟掉头往回跑.当李明按逆时针方向跑到起点,又恰好该往回跑时,他在练习正好停止.如果李明每分钟跑120米,那么它停止练习时是几点几分?他一共跑了多少米?
[120,400]=1200 ,[120与400]的最小公倍数是1200
1200÷120=10(次)
1+2+3+……+19=190(分钟)
120×190=22800(米)
一天24小时内,钟表的时针、分针、秒针会重合几次?
只有两次。
假设时针的角速度是ω(ω=2π/12小时=π/6小时),则分针的角速度为12ω(12ω=2π/60分钟),秒针的角速度为72ω(72ω=2π/60秒)。
假设分针与时针再次重合的时间为t,则有12ωt-ωt=2π,t=12/11小时,换算成时分秒为1小时5分27.3秒,显然秒针不与时针分针重合,同样可以算出其它10次分针与时针重合时秒针都不能与它们重合。只有在正12点和0点时才会重合。
一共22次
由于时针1分钟旋转的圆心角度数为0.5度,分针1分钟旋转的圆心角度为6度,
当两针第一次重合时后到第二次重合,
分针比时针多旋转过的圆心角度数为360度,所以两针再次重合需要的时间为:
t=65+5/11 分,
这类问题实际上是分针追时针的追击问题,它的公式是:
t= s/(v1-v2) ,S=60(格)
分针速度:V1=1 格/分,
时针速度:
V2= 1/12 格/分,
所以,计算得到t=65+5/11 分,
根据以上计算,每隔65+5/11 分时针和分针重合一次。
即,从12点开始,每经过65+5/11 分,时针与分针重合一次,
全天共重合22次
连续的大于6的三个整数,其中两个为质数,求证,另一个可以被6整除。
用反证法:假设该命题不成立,则设其中的那个不能被6整除的数为6k+b其中,k为任意大于0的数,b为1,2,3,4,5的其中之一。因为三个数连续,所以可以通过6k+b将剩下的两个数表示出来,发现当b取1,2,3,4,5的任意值时,均不能满足题设条件(两个数为质数)。综上,必有一个可被6整除。
(质数(prime number)又称素数,有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。)
(证明:
一切自然数都可以表示成这样的形式2n-1,2n(n=1,2,3...);如果这个数不能被2整除,则它只能是2n-1,但2n-1两边必然是偶数,非质数,故而这个数必须被2整除;
同理一切自然数都可以表示成这样的形式3n-2,3n-1,3n(n=1,2,3...);如果这个数不能被3整除则这个数为3n-2或3n-1,这样它的两边一定有能被3整除的数(3n或3(n-1)),非质数,故而这个数也能被3整除;
以上两点建立于这个数大于或等于4,所以当这三个数都大于6时,必然要同时满足被2和被3整除(被6整除的充要条件);
证毕)
/*
质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。
该算法的时间复杂度O(n)。
*/
bool isprime(int m)
{
int i;
for (i = 2; i < m; i++)//for(int i=2;i<=sqrt(m);i++
{
if (m % i == 0)
return false;
else
return true;
}
}
// 只有1为公约数的两个正整数,两个整数才会互质
// 也就是说两个整数的最大公约数为1,即可判断两个正整数互质
bool isrp(int a, int b){
if (a <= 0 || b <= 0 || a == b){ // 互质整数不能小于或等于0
return false;
}
else if (a == 1 || b == 1){ // 两个正整数中,只有其中一个数值为1,两个正整数为互质数
return true;
}
else{
// 求出两个正整数的最大公约数,辗转相除法
while (1){
int t = a%b;
if (t == 0)
{
break;
}
else
{
a = b;
b = t;
}
}
if (b > 1)
{ // 如果最大公约数大于1,表示两个正整数不互质
return false;
}
else
{ // 如果最大公约数等于1,表示两个正整数互质
return true;
}
}
}
/*
辗转相除法, 又名欧几里德算法(Euclidean algorithm),是求最大公约数的一种方法。
它的具体做法是:用较小数除较大数,再用出现的余数(第一余数)去除除数,
再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。
如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。
*/
int GCD(int a, int b)
{
return b == 0 ? a : GCD(b, a%b);
}
int gcd(int a, int b)
{
// 求出两个正整数的最大公约数,辗转相除法
while (1){
int t = a%b;
if (t == 0)
{
break;
}
else
{
a = b;
b = t;
}
}
}