博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【hdu3579-Hello Kiki】拓展欧几里得-同余方程组
阅读量:5032 次
发布时间:2019-06-12

本文共 1313 字,大约阅读时间需要 4 分钟。

 

题解:同余方程组的裸题。注意输出是最小的正整数,不包括0。

#include
#include
#include
#include
using namespace std;typedef long long LL;const int N=20;LL exgcd(LL a,LL b,LL &x,LL &y){ if(b==0) {x=1,y=0; return a;} LL tx,ty; LL d=exgcd(b,a%b,tx,ty); x=ty; y=tx-(a/b)*ty; return d;}int main(){ // freopen("a.in","r",stdin); // freopen("a.out","w",stdout); int n,T; scanf("%d",&T); LL a[N],b[N]; for(int TT=1;TT<=T;TT++) { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%I64d",&a[i]); for(int i=1;i<=n;i++) scanf("%I64d",&b[i]); LL a1=a[1],b1=b[1]; bool bk=1; for(int i=2;i<=n;i++) { LL A=a1,B=a[i],C=b[i]-b1,x,y; LL g=exgcd(A,B,x,y); if(C%g) {bk=0;break;} x=((x*C/g)%(B/g)+(B/g))%(B/g); b1=a1*x+b1; a1=a1/g*a[i]; } if(!bk) printf("Case %d: -1\n",TT); else{ /* a1x+b1=P;(a1>=0,P求的是最小正整数) b1!=0 --> x=0,b1=P b1==0 --> x=1,a1=P */ if(b1) printf("Case %d: %I64d\n",TT,b1); else printf("Case %d: %I64d\n",TT,a1); } } return 0;}
View Code

 

转载于:https://www.cnblogs.com/KonjakJuruo/p/5178487.html

你可能感兴趣的文章
[转]从程序员到项目经理(三):认识项目经理
查看>>
深度分析如何在Hadoop中控制Map的数量
查看>>
dede判断当前文章
查看>>
mpvue学习笔记
查看>>
[LeetCode] 628. Maximum Product of Three Numbers_Easy
查看>>
[Java in NetBeans] Lesson 06. Custom classes
查看>>
[AngularFire2 & Firestore] Example for collection and doc
查看>>
[Javascript] The "this" keyword
查看>>
ElasticSearch-5.3.1集群环境搭建,安装ElasticSearch-head插件,安装错误解决
查看>>
sharepoint Report使用共享数据源部署报错
查看>>
C++ Primer 5th 第16章 模板与泛型编程
查看>>
22个Web 在线编辑器[转]
查看>>
解决“The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path”问题...
查看>>
T-SQL语句学习(一)
查看>>
装箱拆箱(一)
查看>>
Python3 PyMySQL 的使用
查看>>
11个审查Linux是否被入侵的方法
查看>>
CentOS6.7源码安装MySQL5.6
查看>>
android Bitmap总结
查看>>
触发器简介
查看>>