#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】
原文地址:http://blog.csdn.net/jingweihu/article/details/26800177