数学习题解析
第一题:已知正整数 a、b、c 互质,且 a/b+c/b = 5/7,求 a、b、c 三个数。
解析:
设 a/b=x,c/b=y,则有 x+y=5/7 ;由于 a、b、c 互质,所以 x 和 y 也互质,因此 5/7>x>y>0 。又因为 x+y=5/7,所以 x=5/7-y 。
所以 5/7>x>0,5/7>y>0,且 x、y 互质。为方便,设分别为 m/n、p/q(其中 m,p,q,n 均为正整数)。于是我们得到:
(1)m+p=n+q;
(2)5q=7n;
又因为互质,所以 m,n 互质,p,q 互质。因此必有:
(1)q≡±1 (mod 5),因为 5q=7n;
(2)n≡±1 (mod 7),因为 5q=7n;
(3)m≡1-p (mod q);
(4)p≡1-m (mod n)。
几乎可以确定答案了。设 q=5k±1,n=7t±1,则得到:
(1)k=4,n=27,则 p=11,m=16,则此时 a=16b,b,c=27b 。
第二题:两个很大的正整数相除,取其商的整数部分。请您编程实现这个算法。
解析:
这是一道经典题目,叫做大整数除法。
假定要计算 N 除以 M 的商 Q,可以先将 M 放大成 N 位数,然后将 N 减去 M。如果 N 大于 M,就继续将 M 放大,否则就把商 Q 的对应位的值赋为 0,然后将 N 再扩充一个小数点继续计算。
这可以用 C++ 实现:
```c++ #include123456789000000000000000000000000
12345678
输出数据样例:
99999950000000000000000000000000
第三题:已知一个三、四、五位数的各位数字的和均为 7,这些数之和是多少?
解析:
在各位数字之和为 7 的情况下,使这些数之和最大,需要使这些数的高位尽可能地大。
设它们分别是 a1b1c1、a2b2c2d2 和 a3b3c3d3e3 三个数,那么这个数字和为:
a1×100+b1×10+c1+a2×1000+b2×100+c2×10+d2+a3×10000+b3×1000+c3×100+d3×10+e3
所以,三个数分别是:
1993,9641,19963
它们的和为 28597。