关闭

UVa10976 Fractions Agains?!

标签: 枚举
122人阅读 评论(0) 收藏 举报
分类:


来源:《算法竞赛入门经典(第二版)》例题7-3、UVa10976
题目描述:
输入正整数k,求所有正整数x >= y,使得 1 / k = 1 / x + 1 / y
题目分析:
首先作为UVa的题目我们要小心输出格式。这个题是枚举+简单数学。
假定我们枚举y,由题目给的限制条件解出x = yk / (y - k);而x要满足条件:①x是正整数;②x >= y;不难得到这要求k < y <= 2k 且有 (y - k) | yk。对 y 的可能解空间进行枚举即可。
对了里面用到了c++11的特性,不得不说UVa还是有点爽的。

//  Created by wander on 16/5/27.
//  Copyright © 2016年 W4anD0eR96. All rights reserved.
//  UVa10976 Fractions Agains?!
//  类型:枚举-整数枚举

#include "bits/stdc++.h"
using namespace std;

int n;

int main() {
#ifdef DEBUG
  freopen("in", "r", stdin);
  freopen("out", "w", stdout);
#endif
  while (~scanf("%d", &n)) {
    // work
    vector< pair<int, int> > v;
    for (int y = n + 1, s, t; y <= n + n; y += 1) {
      t = y * n; s = y - n;
      if (t % s != 0) continue;
      if (t / s >= y) v.push_back(make_pair(t / s, y));
    }
    printf("%d\n", (int)v.size());
    for (auto x : v) printf("1/%d = 1/%d + 1/%d\n", n, x.first, x.second);
  }
  return 0;
}
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:9482次
    • 积分:570
    • 等级:
    • 排名:千里之外
    • 原创:51篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类