1/k=1/m+1/n,2<=k<=30000,要輸出所有的情況。
例如1/2=1/4+1/4;1/2=1/3+1/6。
求完整代碼,或者M的最大值。用freopen的文件輸入。scanf,printf輸入輸出。
數學分析。
1) 我們假設 m <= n ,因為 k 必然小於 m 和 n ,則有 k < m <= n
2) 1/k=1/m+1/n 轉換為 n 的等式,為 n = km/(m-k)
3) k 為輸入,是已知數。我們要枚舉 m 來獲得 n 。
因為 k < m <= n ,也就是 k < m <= km/(m-k) ,解得 k < m <= 2k 。
4) 因此我們程序要做的就是:
枚舉 m 的值為 [k+1,2k] 的壹個整數,n = km/(m-k)
看是否能得到整數解 n
*/
#include <stdio.h>
int main(int argc, char *argv[])
{
int k,m,n;
// 重定向輸入流
freopen("data.txt","r",stdin);
while(scanf("%d",&k)!=EOF)
{
for(m=k+1;m<=2*k;m++)
{
// 判斷 km/(m-k) 是整數
if(k*m%(m-k) == 0)
{
n = k*m/(m-k);
printf("1/%d = 1/%d + 1/%d\n",k,m,n);
}
}
}
return 0;
}