#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
int N;
cin>>N;
while(N--)
{
int k,m,n;
cin>>k;
for(m=k+1;m<=2*k;m++)
{
if(k*m%(m-k)==0)
{
n=k*m/(m-k);
printf("1/%d=1/%d+1/%d \n",k,n,m);
}
}
}
}
数学分析。
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】