二进制枚举+容斥原理+中国剩余定理

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std; #define MAXN 20
typedef long long LL; int n;
int s[MAXN];
LL a[MAXN], m[MAXN]; //a是余数,m是除数 LL extented_gcd(LL a,LL b, LL &x, LL &y) //扩展欧几里得
{
if(a == 0 && b == 0) return -1;
if(b == 0){
x = 1; y = 0; return a;
}
LL d = extented_gcd(b, a%b, y, x);
y -= a/b*x;
return d;
} LL mult(LL a, LL k, LL m){ //快速乘法
LL res = 0;
while(k){
if(k & 1LL) res = (res + a) % m;
k >>= 1;
a = (a << 1) % m;
}
return res;
} //x = ai(mod mi) mi之间互素
//M = m1 * m2 * ... * mi
//Mi'*Mi = 1 (mod mi) Mi = M/mi
//x = sigma(ai * Mi * M') % M
LL CRT(LL l, LL r) //中国剩余定理
{
LL M = 1, ans = 0;
for (int i = 0; i <= n; ++i)
if(s[i]) M *= m[i];
for(int i = 0;i <= n;i++)
{
if(s[i]){
LL Mi = M/m[i];
LL x,y;
extented_gcd(Mi, m[i], x,y); //求Mi*x=1(mod m[i])
x = (x%m[i] + m[i]) % m[i];
ans = (ans+mult(a[i]*Mi % M, x, M)) % M; //计算最小解
}
}
return (r+M-ans)/M - (l-1+M-ans)/M; //计算[l,r]间解的个数
} int main()
{
//freopen("in", "r", stdin);
int T, cas = 0;
scanf("%d", &T);
while(T--){
LL l, r;
scanf("%d%lld%lld", &n, &l, &r);
memset(s, 0, sizeof(s));
m[n] = 7; a[n] = 0; s[n] = 1;
for(int i = 0;i < n;i++)
scanf("%lld%lld", &m[i], &a[i]);
LL ans = 0;
int all = 1 << n;
for(int i = 0;i < all;i++){ //二进制枚举同余方程
int t = i, k = 0;
for(int j = 0;j < n;j++){
s[j] = t & 1;
t >>= 1;
k += s[j]; //计算同余方程个数
}
k = k & 1 ? -1 : 1;//容斥定理-奇减偶加
ans += 1LL * k * CRT(l, r);
}
printf("Case #%d: %lld\n", ++cas, ans);
}
return 0;
}

ACM/ICPC 之 中国剩余定理+容斥原理(HDU5768)的更多相关文章

  1. HDU 5768:Lucky7(中国剩余定理 + 容斥原理)

    http://acm.hdu.edu.cn/showproblem.php?pid=5768 Lucky7 Problem Description   When ?? was born, seven ...

  2. Hdu 5446 Unknown Treasure (2015 ACM/ICPC Asia Regional Changchun Online Lucas定理 + 中国剩余定理)

    题目链接: Hdu 5446 Unknown Treasure 题目描述: 就是有n个苹果,要选出来m个,问有多少种选法?还有k个素数,p1,p2,p3,...pk,结果对lcm(p1,p2,p3.. ...

  3. 【中国剩余定理】【容斥原理】【快速乘法】【数论】HDU 5768 Lucky7

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5768 题目大意: T组数据,求L~R中满足:1.是7的倍数,2.对n个素数有 %pi!=ai  的数 ...

  4. HDU 5768 Lucky7 (容斥原理 + 中国剩余定理 + 状态压缩 + 带膜乘法)

    题意:……应该不用我说了,看起来就很容斥原理,很中国剩余定理…… 方法:因为题目中的n最大是15,使用状态压缩可以将所有的组合都举出来,然后再拆开成数组,进行中国剩余定理的运算,中国剩余定理能够求出同 ...

  5. Lucky 7 (容斥原理 + 中国剩余定理)

    题意:求满足7的倍数,不满足其他条件num % p == a 的num的个数. 思路:利用中国剩余定理我i们可以求出7的倍数,但是多算了不满足约定条件又得减去一个,但是又发现多减了,又得加回来.如此, ...

  6. HDU 5768 Lucky7 容斥原理+中国剩余定理(互质)

    分析: 因为满足任意一组pi和ai,即可使一个“幸运数”被“污染”,我们可以想到通过容斥来处理这个问题.当我们选定了一系列pi和ai后,题意转化为求[x,y]中被7整除余0,且被这一系列pi除余ai的 ...

  7. HDU 5446 中国剩余定理+lucas

    Unknown Treasure Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Other ...

  8. HDU 5768 Lucky7 (中国剩余定理 + 容斥 + 快速乘法)

    Lucky7 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5768 Description When ?? was born, seven crow ...

  9. HDU 5768 Lucky7 (中国剩余定理+容斥)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5768 给你n个同余方程组,然后给你l,r,问你l,r中有多少数%7=0且%ai != bi. 比较明显 ...

随机推荐

  1. Ext分页实现(前台与后台)

    Ext分页实现(前台与后台)Spring+Mybatis 一.项目背景 关于Ext的分页网上有很多博客都有提到,但是作为Ext新手来说,并不能很容易的在自己的项目中得以应用.因为,大多数教程以及博客基 ...

  2. mtk flash tool,Win7 On VirtualBox

    SP_Flash_Tool_exe_Windows_v5.1624.00.000 Win7 在 VirtualBox, 安裝 mtk flash tool, v5.1628 在燒錄時會 fail. v ...

  3. iOS 中block中使用了外部变量的分析

    例子1: ; void (^blk)(void) = ^(){ printf("in block %d[%p]\n", val, &val); //in block 10[ ...

  4. 基于ArcGIS API for Javascript的地图编辑工具

    最近工作上需要用ArcGIS API for Javascript来开发一个浏览器上使用的地图编辑工具,分享一下一些相关的开发经验. 我开发的地图编辑工具是根据ESRI提供的例子修改而来的,参考的例子 ...

  5. MSMQ学习

    一.理论准备 MSMQ(MicroSoft Message Queue,微软消息队列)官方的解释是:在多个不同的应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一台机器上,也可以分布 ...

  6. UOJ79 一般图最大匹配

    题目描述 从前一个和谐的班级,所有人都是搞OI的.有 nn 个是男生,有 00 个是女生.男生编号分别为 1,-,n1,-,n. 现在老师想把他们分成若干个两人小组写动态仙人掌,一个人负责搬砖另一个人 ...

  7. Javascript两个感叹号的用法(!!)

    var foo; alert(!foo);//undefind情况下或者null,一个感叹号返回的是true; alert(!goo);//undefind情况下,一个感叹号返回的也是true; 但是 ...

  8. ECC-Elliptic Curves Cryptography,椭圆曲线密码编码学

    ECC ECC-Elliptic Curves Cryptography,椭圆曲线密码编码学,是目前已知的公钥体制中,对每比特所提供加密强度最高的一种体制.在软件注册保护方面起到很大的作用,一般的序列 ...

  9. 【APP设计利器】Sketch 41 Mac中文破解版(含汉化插件)

    Sketch是一款拥有美观界面和强大功能适用于所有设计师的专业矢量绘图工具.它旨在为美术设计师创造出一款更优秀的作品,不是复制品,而是提升品.Sketch简约的设计是基于无限的规模和层次的绘图空间,免 ...

  10. Java程序员笔试、面试题目

    1. 面向对象编程的三大特性是什么,请简要阐述 2. String 和StringBuffer的区别 3. 说出ArrayList,Vector, LinkedList的存储性能和特性 4. Coll ...