#include <stdio.h>
#include <math.h>
int main()
{
int i, n = 5, // 人数
num = pow(n, n) - n + 1;
printf("至少合伙捕鱼:%d条\n", num);
printf("分别见到鱼的条数:");
for(i=0; i<n; i++, num=4*(num-1)/5)
printf("%d%c", num, i==n-1? '\n': ' ');
}
设 E 最后留下了 x 条鱼,并用每个人的名字代表其醒来时看到的鱼,则可得:
E = 5x/4 + 1
E + 4 = 5(x + 4)/4
E = 5(x + 4)/4 - 4
D = 5E/4 + 1 = 25(x + 4)/16 - 4
C = 5D/4 + 1 = 125(x + 4)/64 - 4
B = 5C/4 + 1 = 625(x + 4)/256 - 4
A = 5B/4 + 1 = 3125(x + 4)/1024 - 4
由于A为整数,故3125(x + 4)必须要能够整除1024,且当A取得整数后,由于B、C、D、E式中的分母256、64、16、4皆为1024的因数,也能一同取得整数.
易知当x + 4 = 1024时,A取得最小值3121
使用数学归纳法可得出公式:
至少捕到的鱼 = 人数^人数 - 人数 + 1