Fraction Construction Problem

思路

cd−ef=ab\frac{c}{d} - \frac{e}{f} = \frac{a}{b}dc​−fe​=ba​

a<b&f<ba < b \& f < ba<b&f<b

1≤1,e≤4×10121 \leq 1, e \leq 4 \times10 ^{12}1≤1,e≤4×1012

  • 当b = 1时,一定无解。

  • gcd(a, b) != 1,能够较为简单地构造出来。

  • b=pkb = p ^ kb=pk,我们设d=pk−x,f=pxd = p ^{k - x}, f = p ^ xd=pk−x,f=px,左边方程通分得到cpx−epk−xpk\frac{c p ^ x - e p ^{k - x}}{p ^ k}pkcpx−epk−x​,则方程cpx−epk−x=acp ^ x - ep ^{k - x} = acpx−epk−x=a有解,那么一定有gcd(px,pk−x)∣agcd(p ^ x, p ^{k - x}) \mid agcd(px,pk−x)∣a,

    只能x=0x = 0x=0,所以d=pk=bd = p ^ k = bd=pk=b不符合要求。

  • 所以这时bbb一定有至少两个质因,我们不妨设d×f=bd \times f = bd×f=b,d,fd, fd,f互质,这样我们只要通过拓展欧几里德去求解即可。

代码

/*Author : lifehappy
*/
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include <bits/stdc++.h>using namespace std;typedef long long ll;const int inf = 0x3f3f3f3f;
const double eps = 1e-7;const int N = 1e4 + 10;int prime[N], cnt;ll c, d, e, f;bool st[N];void init() {for(int i = 2; i < N; i++) {if(!st[i]) {prime[cnt++] = i;}for(int j = 0; j < cnt && i * prime[j] < N; j++) {st[i * prime[j]] = 1;if(i % prime[j] == 0) break;}}
}bool get_fac(ll n) {for(int i = 0; prime[i] * prime[i] <= n; i++) {if(n % prime[i] == 0) {d = 1;while(n % prime[i] == 0) {n /= prime[i];d *= prime[i];}if(n == 1) return false;return true;}}return false;
}ll exgcd(ll a, ll b, ll & x, ll & y) {if(!b) {x = 1, y = 0;return a;}ll d = exgcd(b, a % b, x, y);ll temp = x;x = y;y = temp - a / b * y;return d;
}int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);// ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);int T;init();scanf("%d", &T);while(T--) {ll a, b;scanf("%lld %lld", &a, &b);int gcd = __gcd(a, b);if(gcd != 1) {printf("%lld %lld %lld %lld\n", a / gcd + 1, b / gcd, 1, b / gcd);continue;}if(!get_fac(b)) {puts("-1 -1 -1 -1");continue;}f = b / d;if(f < d) swap(f, d);ll x, y;ll g = exgcd(f, d, x, y);while(y > 0) x += d, y -= f;printf("%lld %lld %lld %lld\n", x * a, d, -y * a, f);}return 0;
}

Fraction Construction Problem(拓展欧几里德)相关推荐

  1. exgcd ---- 2020牛客多校第三场:[Fraction Construction Problem:exgcd+思维题]

    题目链接 题目大意:就是给你两个数a,ba,ba,b叫你求满足下面三个条件的c,d,e,fc,d,e,fc,d,e,f 1.cd−ef=ab1.{c\over d}-{e\over f}={a\ove ...

  2. 牛客多校3 - Fraction Construction Problem(扩展欧几里得)

    题目链接:点击查看 题目大意:给出 a 和 b ,求解满足条件的 c,d,e,f ,使得: d < b f < b c,e 均为小于等于 4e12 的正整数 题目分析:分情况讨论一下,首先 ...

  3. UVa 12169 - Disgruntled Judge(拓展欧几里德)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  4. 如何利用扩展欧几里得算法求解不定方程_欧几里德算法、拓展欧几里德、中国剩余定理...

    01.欧几里德算法(Euclidean algorithm)(辗转相除法) 欧几里德算法又称辗转相除法,主要是用于计算两个整数a,b的最大公约数. 简单点说一下算法原理:两个整数的最大公约数等于其中小 ...

  5. 青蛙的约会 数论 拓展欧几里德

    两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特 ...

  6. 欧几里德算法+拓展欧几里德算法

    欧几里德算法一般简写为GCD,即辗转相除求最大公因数,模板为 ll gcd(ll a,ll b) {return b==0?a:gcd(b,a%b); } 由于这种求的方法适用于大数,所以一般数据类型 ...

  7. 【poj 2891】Strange Way to Express Integers(数论--拓展欧几里德 求解同余方程组 模版题)...

    题意:Elina看一本刘汝佳的书(O_O*),里面介绍了一种奇怪的方法表示一个非负整数 m .也就是有 k 对 ( ai , ri ) 可以这样表示--m%ai=ri.问 m 的最小值. 解法:拓展欧 ...

  8. 欧几里德算法、拓展欧几里德、中国剩余定理

    目录 欧几里德算法(Euclidean algorithm)(辗转相除法) 拓展欧几里德算法 中国剩余定理 作业1: 作业2: 欧几里德算法(Euclidean algorithm)(辗转相除法) 欧 ...

  9. 牛客练习赛22 E 树状数组 + DFS + 拓展欧几里德定理

    题目链接 题意: 给定一个长度为nnn的序列,进行mmm次操作,操作有两类: 111 LLL RRR vvv : 区间[L,R][L, R][L,R]的每个数加上vvv 222 LLL RRR ppp ...

最新文章

  1. 2022-2028年中国超韧尼龙行业市场调查分析及未来前景分析报告
  2. python 常见的元字符(\d,\w ,^ ,$ 等) 的使用
  3. Android编程:解决异常“android.view.InflateException: Binary XML file line # : Error inflating class”
  4. java try catch嵌套_try catch里面try catch嵌套
  5. Google也开始弄开源平台,好事啊
  6. Facebook's New Real-time Messaging System: HBase to Store 135+ Billion Messages a Month
  7. php拉取公众号所有关注的人,微信公众平台开发获取关注者列表
  8. jdk1.8 Windows安装全过程详尽版
  9. C++STL泛型编程基础知识讲解--------2015年2月3日
  10. 如何用相机拍出天空漂亮的云朵
  11. 初中会考计算机flash,初中信息技术考试flash.doc
  12. ai怎么做盒子效果图_AI教程:打造一个逼真的包装盒
  13. 深度学习----HOI人物交互算法:ICAN
  14. URL里面携带了#是什么意思
  15. 商用密码应用安全性评估量化评估规则(2021版)
  16. php env 函数不存在,PHP编程:探究Laravel使用env函数读取环境变量为null的问题
  17. 遇到人生低谷期该怎么度过?
  18. 阿里云服务器搭建wordpress个人博客
  19. CUDA并行编程较有用的总结
  20. 正弦稳态电路的相关概念

热门文章

  1. java地址映射关系,Spring MVC——基础(简介,使用,地址映射)
  2. ppt变成了图片不能编辑文字怎么办_谁说水印一定要去掉?用到PPT里贼好看好吗!...
  3. 知乎超高赞:见识多的人,平时都在看些什么?
  4. 中国代工厂的困惑:把大牌t恤卖到99块3件,还会有人买吗?
  5. 史上最丧心病狂的商品定价套路:如何从数学角度,榨干你身上的每一分钱
  6. 深度学习框架再次升级,它们都有什么优点?
  7. 扎哈遗作:北京大兴机场,耗资800亿,被英国《卫报》评为新世界七大奇迹!...
  8. 如何通过自学找到一份开发的工作?
  9. python 多分类情感_python 文本情感分类
  10. mysql select 反选_JQuery实现全选、全不选和反选功能