Uvalive 6428 A+B(扩展欧几里得算法)
来源:互联网 发布:海南知和行书局 编辑:程序博客网 时间:2024/06/04 18:11
【题目链接】:click here~~
【题目大意】:求满足类似a*x+b*y=c的方程,问是否存在整数解(a,b,c<10^18)
【思路】扩展欧几里得算法,注意特判等于零的情况
代码:
#include <bits/stdc++.h>using namespace std;typedef long long LL;LL a,b,c;LL gcd(LL a,LL b){ return b==0?a:gcd(b,a%b);}// 求解 a * n + b * m = gcd(n, m)// 求得一组解 (x0, y0)// 解系: (x0 + k * b / g, y0 - k * a / g)LL ext_gcd(LL &a,LL &b,LL n,LL m) // Extended Euclidean Algorithm{ if(m==0) { a=1; b=0; return n; } LL d=ext_gcd(b,a,m,n%m); b-=n/m*a; return d;}int main(){ while(scanf("%lld %lld %lld",&a,&b,&c)!=EOF) { if(!a&&!b) // special judge the a and b if it value 0 { if(!c) puts("YES"); else puts("NO"); continue; } if(!a) { if((c%b)==0) puts("YES"); else puts("NO"); continue; } if(!b) { if((c%a)==0) puts("YES"); else puts("NO"); continue; } LL x,y,g; g=ext_gcd(x,y,a,b); if((c%g)!=0) { puts("NO"); continue; } LL x0=b/g; LL y0=a/g; x=((c/g%x0)*(x%x0)%x0+x0)%x0; y=(c-x*a)/b; bool ok=false; while(y>0) { if(gcd(x,y)==1) { ok=true; break; } x+=x0;y-=y0; } if(ok) puts("YES"); else puts("NO"); } return 0;}
0 0
- Uvalive 6428 A+B(扩展欧几里得算法)
- UVALive 6428A+B 【扩展欧几里得】
- hdu-1576-A/B【扩展欧几里得算法】
- A/B(扩展欧几里得算法)
- hdu 1576 A/B 扩展欧几里得算法
- UVALive6428 A+B【扩展欧几里得算法+GCD】
- HDU 1576-A/B(扩展欧几里得算法)
- HDU-1576 A/B (扩展欧几里得算法)
- A/B(扩展欧几里得)
- UVALive 6428 A+B // 扩展欧几里德
- UVALive 6428 A+B 扩展欧几里德
- [数论]HDU 1576 A/B 扩展欧几里得算法
- poj 1576 A/B(扩展欧几里得算法)
- HDU 1576 A/B(扩展欧几里得算法)
- HDU1576 A/B 扩展欧几里得
- HDU1576 A/B(扩展欧几里得)
- [hdu1576]: A/b (扩展欧几里得)
- 求gcd(a,b) = ax + by中的gcd(a, b)、a、b(扩展欧几里得算法尾递归版)
- 数据结构基础 之 双链表
- Collection之List Vector ArrayList and linkedList
- 【后缀数组】 POJ 3882 Stammering Aliens 可重叠出现k次字符串
- maven仓库查询地址
- Android项目开发实战:倒计时
- Uvalive 6428 A+B(扩展欧几里得算法)
- 9.1筆記,系統分享,Fragment not attached to Activity
- leetcode 191: Number of 1 Bits
- QT中实现类似网页搜索的自动出现下拉提示
- stream_register_wrapper 注册一个用 PHP 类实现的 URL 封装协议 允许用户实现自定义的协议处理器和流
- iPhone第三节:UITableView(2)
- 下一代hadoop(Mapreduce),YARN/MRv2
- ios 的 工程内的多Targets有什么用
- 中兴2016机试题目