本文共 715 字,大约阅读时间需要 2 分钟。
给定正整数k(1<=k <= 10000),找出所有正整数 x>= y, 使得1/k = 1/x + 1/y.
首先,x,y肯定为整数,所以x,y的取值范围不能小于k,即左区间为k+1,因为x>=y,1/x<=1/y,即1/k-1/y<=1/y,所以,1/k<=2/y,所以2k>=y,所以y的取值范围就出来了,[k+1,2*k];
#include#include #include #include using namespace std;const int maxn=1e4+5;int k;int ans[maxn<<1][3];int main(){ while (scanf("%d",&k)!=EOF) { int cnt=0; for (int i=k+1;i<=2*k;i++) { if((k*i)%(i-k)) continue; int j=(k*i)/(i-k); if(j>=i) { ans[cnt][0]=k; ans[cnt][1]=j; ans[cnt][2]=i; cnt++; } } printf("%d\n",cnt); for (int i=0;i
转载地址:http://bwoen.baihongyu.com/