给定“N”找到p& q使得p + q = N且p * q最大

时间:2014-03-06 08:01:05

标签: math

我需要在我提出的粗略解决方案背后的逻辑/理念。

问题是:

给定N,其中1<=N<=1000000
现在我需要找到两个数字p和q,使p + q = N && p * q = maximum.

我选择使用这个(((N+1)/2)*((N/2)));,它基本上给了我最小总和的最大产品。但我对这种逻辑的证明感兴趣。

任何帮助或潜在客户?

#include<stdio.h>

typedef unsigned long uint;
unsigned long calc(uint);

int main(void) {
    short i = 0;
    uint k = 0;
    scanf("%i", &i);
    while(i--) {
        scanf("%lu", &k);
        printf("%lu\n", calc(k));
    }
    return 0;
}

uint calc(uint k){
    return (((k+1)/2)*((k/2)));
}

1 个答案:

答案 0 :(得分:3)

f(p) = p * (N - p) = p * N - p ^ 2

然后:

f'(p) = N - 2 * p
f''(p) = - 2

f''(p) < 0以来,只需求解f'(p) = 0即可获得本地最大值

When f'(p) = 0, 
p = N / 2
=> q = N / 2

您还需要测试端点f(0)f(N),但这两个端点都评估为零,因此我们的最大值是全局最大值。

注意:这基本上是说在某个周长的所有矩形中,正方形的面积最大。