题面

Description

The Brocard Erdös-Straus conjecture is that for any integern > 2 , there are positive integersa ≤ b ≤ c,so that :

\[{4\over n}={1\over a}+{1\over b} +{1\over c}
\]

There may be multiple solutions. For example:

\[{4\over 18}={1\over 9}+{1\over 10}+{1\over 90}={1\over 5}+{1\over 90}+{1\over 90}={1\over 5}+{1\over 46}+{1\over 2470}
\]

Input

The first line of input contains a single decimal integer P, (1 ≤ p ≤ 1000), which is the number of data sets that follow. Each data set should be processed identically and independently.

Each data set consists of a single line of input. It contains the data set number,K, followed by a single space, followed by the decimal integer n,(2 ≤ n ≤ 50000)

Output

For each data set there is one line of output. The single output line consists of the data set number, K, followed by a single space followed by the decimal integer values a, b and c in that order, separated by single spaces

Sample Input

5
1 13
2 529
3 49849
4 49850
5 18

Sample Output

1 4 18 468
2 133 23460 71764140
3 12463 207089366 11696183113896622
4 12463 310640276 96497380762715900
5 5 46 2070

题解

对于这个式子

\[\frac{4}{n}=\frac{1}a+\frac1b+\frac1c
\]

不如先解除\(a\)的范围,首先\(a\)必然大于\(\frac{n}4\),因为\(b和c\)项不能为0,其次\(a\)要小于等于\(\frac{3*n}{4}\),因为要满足字典序最小,\(a\)必然最小。然后我们在这个范围枚举\(a\),计算可行的\(b和c\),不如将\(b和c\)看成一个整体,这样可以解出\(\frac{1}{b}+\frac{1}{c}\)

\[\frac{1}b+\frac{1}c=\frac{4*i-n}{n*i}(\frac{n}{4} +1\leq i \leq \frac{3*n}{4})
\]

如果解出后化简得到的分数正好分子为1,那么我们就可以直接得到\(b和c\),我们假设解出的分数为\(\frac{x}{y},x=1\),那么b和c就可以拆分为

\[b=\frac{1}{y+1} \\ c=\frac{1}{(y+1)*y}
\]

如果化简后不为1,则从小到大枚举b,找到最小的c,枚举下界从解出的分数的倒数+1开始,保证\(\frac{1}{b} < \frac{x}{y}\)到倒数的两倍结束,因为如果超过两倍的倒数b就大于c了,这时应轮换b和c使字典序最小,找出答案记录立刻退出循环即可

代码写的比较丑

AC代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll gcd(ll a, ll b) {
return a % b == 0 ? b : gcd(b, a % b);
}
int main() {
int t;
scanf("%d", &t);
while (t--) {
int k; ll n;
scanf("%d%lld", &k, &n);
ll l = n / 4 + 1;
ll r = n * 3 / 4;
ll a, b, c;
bool flag = false;
for (ll i = l; i <= r; i++) {
if (flag) break;
ll x = n * i;
ll y = 4 * i - n;
ll num = gcd(x, y);
x /= num;
y /= num;
if (y == 1) {
a = i;
b = x + 1;
c = (x + 1) * x;
flag = true;
break;
}
else {
ll s = x / y + 1;
ll t = 2 * x / y;
for (ll j = s; j <= t; j++) {
ll tmp = y * j - x;
if ((x * j) % tmp == 0) {
a = i;
b = j;
c = x * j / tmp;
flag = true;
break;
}
}
}
}
printf("%d %lld %lld %lld\n", k, a, b, c);
}
return 0;
}

最近可能都没太有空更题解了,没做的题有点多,作业还好多wwww

The Erdös-Straus Conjecture 题解的更多相关文章

  1. Goldbach`s Conjecture(素筛水题)题解

    Goldbach`s Conjecture Goldbach's conjecture is one of the oldest unsolved problems in number theory ...

  2. poj 2262 Goldbach's Conjecture(素数筛选法)

    http://poj.org/problem?id=2262 Goldbach's Conjecture Time Limit: 1000MS   Memory Limit: 65536K Total ...

  3. 【LightOJ1259】Goldbach`s Conjecture(数论)

    [LightOJ1259]Goldbach`s Conjecture(数论) 题面 Vjudge T组询问,每组询问是一个偶数n 验证哥德巴赫猜想 回答n=a+b 且a,b(a<=b)是质数的方 ...

  4. IEEEXtreme 极限编程大赛题解

    这是 meelo 原创的 IEEEXtreme极限编程大赛题解 IEEEXtreme全球极限编程挑战赛,是由IEEE主办,IEEE学生分会组织承办.IEEE会员参与指导和监督的.IEEE学生会员以团队 ...

  5. IEEEXtreme 10.0 - Goldbach's Second Conjecture

    这是 meelo 原创的 IEEEXtreme极限编程大赛题解 Xtreme 10.0 - Goldbach's Second Conjecture 题目来源 第10届IEEE极限编程大赛 https ...

  6. Poj 2662,2909 Goldbach's Conjecture (素数判定)

    一.Description In 1742, Christian Goldbach, a German amateur mathematician, sent a letter to Leonhard ...

  7. LightOJ1259 Goldbach`s Conjecture —— 素数表

    题目链接:https://vjudge.net/problem/LightOJ-1259 1259 - Goldbach`s Conjecture    PDF (English) Statistic ...

  8. Light oj-1259 - Goldbach`s Conjecture

                                                                                    1259 - Goldbach`s Co ...

  9. [POJ2262] Goldbach’s Conjecture

    Goldbach's Conjecture Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 48161   Accepted: ...

随机推荐

  1. 2018年暑假ACM个人训练题7 题解报告

    A:HDU 1060 Leftmost Digit(求N^N的第一位数字 log10的巧妙使用) B:(还需要研究一下.....) C:HDU 1071 The area(求三个点确定的抛物线的面积, ...

  2. 01_常用 Linux 命令的基本使用

    01. 学习 Linux 终端命令的原因 Linux 刚面世时并没有图形界面,所有的操作全靠命令完成,如 磁盘操作.文件存取.目录操作.进程管理.文件权限 设定等 在职场中,大量的 服务器维护工作 都 ...

  3. js通过ua标识判断h5页面是否内嵌在app内

    var userAgent = navigator.userAgent.toLowerCase();//获取UA信息 if(userAgent.indexOf("ezhouxing" ...

  4. spring(二)-反射、动态代理

    主要是对上一篇文章中涉及到的点做补充,欢迎指正! 1.  java反射知识-Spring IOC 依赖注入 Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类:在运行时构造任意一个 ...

  5. 使用RMAN对数据文件进行恢复

    (1)备份数据库 在使用RMAN进行数据库恢复之前,先用RMAN进行全库备份 [oracle@redhat6 ~]$ rman target / Recovery Manager: Release : ...

  6. 请对比 Exception 和 Error,另外,运行时异常与一般异常有什么区别?

    error指的是不可预料的错误,可能会导致程序宕机:而exception指的是在程序运行中可以预见的异常,而异常分为检查异常与一般异常,检查异常需要在程序中显示捕获并处理,一般异常可以通过程序编码来进 ...

  7. 模块socket使用

    什么是socket:socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.我们无需再去深入理解tcp/udp协议,按照socket的规定去使用就行了. 首先一个c/s架构:分为两 ...

  8. nodejs+express开发blog(1)

    前言 Nodejs是一个年轻的编程框架,充满了活力和无限激情,一直都在保持着快速更新.基于Nodejs的官方Web开发库Express也在同步发展着,每年升级一个大版本,甚至对框架底层都做了大手术.在 ...

  9. 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛--F-等式

    链接:https://www.nowcoder.com/acm/contest/90/F 来源:牛客网 1.题目描述 给定n,求1/x + 1/y = 1/n (x<=y)的解数.(x.y.n均 ...

  10. gcc 手动安装

    由于公司内部服务器没有联通外网,只能苦逼的手动安装gcc(自带的版本太老) rpm -ivh ppl-0.10.2-11.el6.x86_64.rpm rpm -ivh cloog-ppl-0.15. ...