题目:http://acm.hdu.edu.cn/showproblem.php?pid=3579

题目解析:求一元线性同余方程组的最小解X,需要注意的是如果X等于0,需要加上方程组通解的整数区间lcm(a1,a2,a3,...an)。

别的就没什么注意的了。

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <math.h>
using namespace std;
__int64 a,b,c,d;
__int64 X,Y;
__int64 gcd(__int64 A,__int64 B)
{
return B==?A:gcd(B,A%B);
}
void extend(__int64 A,__int64 B,__int64 &d,__int64 &x1,__int64 &y1)
{
if(B==)
{
x1=;
y1=;
d=A;
return ;
}
extend(B,A%B,d,x1,y1);
__int64 temp=x1;
x1=y1;
y1=temp-(A/B)*y1;
return ;
}
int main()
{
__int64 S[],E[];
__int64 a1,r1,a2,r2,Lcm;
__int64 T;
int m,K=;
scanf("%I64d",&T);
while(T--)
{
scanf("%d",&m);
Lcm=;
for(int i=; i<=m; i++)
{
scanf("%I64d",&S[i]);
Lcm=Lcm/gcd(Lcm,S[i])*S[i];//在一定程度上可以防止爆类型(Lcm*S[i]/gcd())
}
for(int i=; i<=m; i++)
{
scanf("%I64d",&E[i]);
}
bool ifhave=true;
a1=S[],r1=E[];
for(__int64 i=; i<=m; i++)
{
a2=S[i],r2=E[i];
a=a1;
b=a2;
c=r2-r1;
extend(a,b,d,X,Y);
if(c%d)
{
ifhave=false;
break;
}
__int64 t=b/d;
X=(X*(c/d)%t+t)%t;
X=a1*X+r1;
a1=a1*(a2/d);
r1=X;
}
printf("Case %d: ",++K);
if(!ifhave)
{
printf("-1\n");
continue;
}
if(r1==)
r1+=Lcm;
printf("%I64d\n",r1);
}
return ;
}

HDU3579:Hello Kiki(解一元线性同余方程组)的更多相关文章

  1. HDU1573:X问题(解一元线性同余方程组)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1573 题目解析;HDU就是坑,就是因为n,m定义成了__int64就WAY,改成int就A了,无语. 这题 ...

  2. POJ2891:Strange Way to Express Integers(解一元线性同余方程组)

    写一下自己的理解,下面附上转载的:若a==b(modk);//这里的==指的是同余,我用=表示相等(a%k=b)a-b=kt(t为整数)以前理解的错误思想:以前认为上面的形式+(a-tb=k)也是成立 ...

  3. HDU1573 X问题【一元线性同余方程组】

    题目链接: http://acm.hdu.edu.cn/showproblem.php? pid=1573 题目大意: 求在小于等于N的正整数中有多少个X满足:X mod a[0] = b[0], X ...

  4. 【POJ 2891】Strange Way to Express Integers(一元线性同余方程组求解)

    Description Elina is reading a book written by Rujia Liu, which introduces a strange way to express ...

  5. POJ 1061 - 青蛙的约会 - [exgcd求解一元线性同余方程]

    先上干货: 定理1: 如果d = gcd(a,b),则必能找到正的或负的整数k和l,使ax + by = d. (参考exgcd:http://www.cnblogs.com/dilthey/p/68 ...

  6. POJ2115:C Looooops(一元线性同余方程)

    题目: http://poj.org/problem?id=2115 要求: 会求最优解,会求这d个解,即(x+(i-1)*b/d)modm;(看最后那个博客的链接地址) 前两天用二元一次线性方程解过 ...

  7. AcWing 204. 表达整数的奇怪方式 (线性同余方程组)打卡

    给定2n个整数a1,a2,…,ana1,a2,…,an和m1,m2,…,mnm1,m2,…,mn,求一个最小的整数x,满足∀i∈[1,n],x≡mi(mod ai)∀i∈[1,n],x≡mi(mod  ...

  8. poj3708(公式化简+大数进制装换+线性同余方程组)

    刚看到这个题目,有点被吓到,毕竟自己这么弱. 分析了很久,然后发现m,k都可以唯一的用d进制表示.也就是用一个ai,和很多个bi唯一构成. 这点就是解题的关键了. 之后可以发现每次调用函数f(x),相 ...

  9. hdu3579(线性同余方程组)

    Hello Kiki Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

随机推荐

  1. C# Smtp方式发送邮件

    //简单邮件传输协议类             System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient();        ...

  2. Scala 读文件

    环境: Cent OS 6.3 以下说明怎样读取一个文件. 代码: $ cat fileRead.scala import scala.io.Source if (args.length > 0 ...

  3. Mysql综合案例

    Mysql综合案例 考核要点:创建数据表.单表查询.多表查询 已知,有一个学生表student和一个分数表score,请按要求对这两个表进行操作.student表和score分数表的表结构分别如表1- ...

  4. Effective C++ Item 18 Make interfaces easy to use correctly and hard to use incorrectly

    1. A good API will provide easy to use interfaces but also provide hard to miss-use interfaces. Usua ...

  5. linux下安装pip以及导入第三方包

    python有着强大的第三方库,数量很多且功能强大. 最原始的办法是在官网上下载压缩包,解压,然后运行setup.py来进行安装. 显然这种方法很繁琐,不方便.因此有了包管理工具. pip是一个包管理 ...

  6. nodejs搭建简单web服务器!!

    var http = require("http"), url = require("url"), path = require("path" ...

  7. docker run 详解

    docker run 用于把镜像启动为容器,语法如下: docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 常见用法: [root@localhost ~]$ ...

  8. 微信小程序 this.setData 修改json里面的值

    page({ data:{ s1:{a:"",b:"b"} }, changeData:function(e){ var cData=this.data.s1; ...

  9. printf如何输出64位整数

    From: http://blog.csdn.net/zzqhost/article/details/6064886 关于printf函数输出64位数的问题,其实在window下和linux下是不一样 ...

  10. AndroidのBuild工具之Ant动手实践

    好久没有写博客了,没半年也应该有几个月了.在工作上的项目遇到过很多问题或者说积累了不少经验,曾经都蛮想发到博客留个纪念什么的,不求可以为别人获得点经验技巧,只求在多年后遇到同样的问题可以找到个记录.但 ...