HDU-1573-X问题(线性同余方程组)
链接:
https://vjudge.net/problem/HDU-1573
题意:
求在小于等于N的正整数中有多少个X满足:X mod a[0] = b[0], X mod a[1] = b[1], X mod a[2] = b[2], …, X mod a[i] = b[i], … (0 < a[i] <= 10)。
思路:
解线性同余方程组,得到\(x+k*m \leq n\)。
解为\(1+(n-x)/m\)。
当x为0时答案要减一。
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<math.h>
#include<vector>
using namespace std;
typedef long long LL;
const int INF = 1e9;
const int MAXN = 1e6+10;
LL a, b, c, k, n, lcm;
int m;
LL M[20], A[20];
LL ExGcd(LL a, LL b, LL &x, LL &y)
{
    if (b == 0)
    {
        x = 1, y = 0;
        return a;
    }
    LL d = ExGcd(b, a%b, x, y);
    LL tmp = x;
    x = y;
    y = tmp - (a/b)*y;
    return d;
}
LL ExCRT()
{
    LL res = A[1], mod = M[1];
    LL x, y, gcd;
    for (int i = 2;i <= m;i++)
    {
        gcd = ExGcd(mod, M[i], x, y);
        if ((A[i]-res)%gcd)
            return -1;
        x = (x*(A[i]-res))/gcd;
        x = (x%(M[i]/gcd)+(M[i]/gcd))%(M[i]/gcd);
        res = res+mod*x;
        mod = (mod*M[i])/gcd;
        res %= mod;
    }
    lcm = mod;
    return res;
}
int main()
{
    int t;
    scanf("%d", &t);
    while(t--)
    {
        scanf("%lld%d", &n, &m);
        for (int i = 1;i <= m;i++)
            scanf("%lld", &M[i]);
        for (int i = 1;i <= m;i++)
            scanf("%lld", &A[i]);
        LL res = ExCRT();
        if (res == -1 || res > n)
            puts("0");
        else
        {
            printf("%lld\n", (n-res)/lcm+(res!=0));
        }
    }
    return 0;
}
HDU-1573-X问题(线性同余方程组)的更多相关文章
- HDU1573:X问题(解一元线性同余方程组)
		题目:http://acm.hdu.edu.cn/showproblem.php?pid=1573 题目解析;HDU就是坑,就是因为n,m定义成了__int64就WAY,改成int就A了,无语. 这题 ... 
- HDU1573 X问题【一元线性同余方程组】
		题目链接: http://acm.hdu.edu.cn/showproblem.php? pid=1573 题目大意: 求在小于等于N的正整数中有多少个X满足:X mod a[0] = b[0], X ... 
- HDU3579:Hello Kiki(解一元线性同余方程组)
		题目:http://acm.hdu.edu.cn/showproblem.php?pid=3579 题目解析:求一元线性同余方程组的最小解X,需要注意的是如果X等于0,需要加上方程组通解的整数区间lc ... 
- 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 ... 
- poj3708(公式化简+大数进制装换+线性同余方程组)
		刚看到这个题目,有点被吓到,毕竟自己这么弱. 分析了很久,然后发现m,k都可以唯一的用d进制表示.也就是用一个ai,和很多个bi唯一构成. 这点就是解题的关键了. 之后可以发现每次调用函数f(x),相 ... 
- hdu1573(线性同余方程组)
		套模板,因为要是正整数,所以处理一下x=0的情况. X问题 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ... 
- poj2891(线性同余方程组)
		一个exgcd解决一个线性同余问题,多个exgcd解决线性同余方程组. Strange Way to Express Integers Time Limit: 1000MS Memory Limi ... 
- POJ2891Strange Way to Express Integers (线性同余方程组)
		Elina is reading a book written by Rujia Liu, which introduces a strange way to express non-negative ... 
- POJ2891:Strange Way to Express Integers(解一元线性同余方程组)
		写一下自己的理解,下面附上转载的:若a==b(modk);//这里的==指的是同余,我用=表示相等(a%k=b)a-b=kt(t为整数)以前理解的错误思想:以前认为上面的形式+(a-tb=k)也是成立 ... 
随机推荐
- Zero-shot Learning / One-shot Learning / Few-shot Learning
			Zero-shot Learning / One-shot Learning / Few-shot Learning Learning类型:Zero-shot Learning.One-shot Le ... 
- java常用的工具类
			包装类 https://www.cnblogs.com/benjieqiang/p/11305777.html Arrays类(数组工具类) package day02.com.offcn.test; ... 
- I2C基础及时序
			1.模式 标准模式:达到100Kb/S 快速模式:达到400Kb/S 2.连接图 3.协议 SDA.SCL在空闲的时候为高电平 重点!重点!重点! 4.涉及到多主机仲裁的竞争及时钟信号的同步 
- [tomcat] 连接池参数maxActive、maxIdle 、maxWait 等
			maxActive 连接池支持的最大连接数,这里取值为20,表示同时最多有20个数据库连接.设 0 为没有限制.maxIdle 连接池中最多可空闲maxIdle个连接 ,这里取值为20,表示即使没有数 ... 
- git出现Invalid path
			今天换了电脑,我直接把整个仓库从电脑A复制到了电脑B,包括仓库下面的 .git 文件夹. 修改代码后我执行了一下 git add . 出现了一个报错 fatal: Invalid path 'D:/S ... 
- 转 实现类似QQ的窗体停靠
			[DllImport("User32.dll")] public static extern bool PtInRect(ref Rectangle Rects, Point lp ... 
- html中标签的英文含义!
			html中的标签缩写的英文是什么? 标签 英文全称 含义 ul unordered lists 无序列表 li list item 列表项目 ol ordered lists 有序列表 dl d ... 
- pymysql操作mysql数据库
			1.建库 import pymysql # 建库 try: conn=pymysql.connect( host='127.0.0.1', port=3306, user='root', passwd ... 
- PL/SQL Developer_如何快速获得表名或全部列名的文本形式
			转自:https://blog.csdn.net/xwnxwn/article/details/53388887 操作过程: 例1:以“逗号”格式获取“用户表名”的文本 使用scott登陆到PL/SQ ... 
- 编写一个stm32 svc关中断函数
			做到了让stm32触发svc中断并传递进去参数然后切换到handler模式并修改特殊寄存器的值,从而达到关中断,但是其实这个程序直接就是特权级,故不进入handler模式也可以修改特殊寄存器..... ... 
