hdu - 3049 - Data Processing(乘法逆元)
题意:N(N<=40000)个数n1, n2, ..., nN (ni<=N),求(2 ^ n1 + 2 ^ n2 + ... + 2 ^nN) / N % 1000003。
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3049
——>>RJ白书上说“因为‘乘法逆’太重要了……”,上一年南京区赛同学也碰到了求逆元……如今,学习了。。
什么是乘法逆?ab % m = 1 (这里的 a, b 分别都是模 m 的同余等价类),a 模 m 的乘法逆是 b,同一时候,b 模 m 的乘法逆是a。
乘法逆有什么用?这个用处可还真不小。。假设要求 a / b % m(保证 b | a),可是 a 非常大非常大,比方 a = 2 ^ 40000,这个式子可不等价于 (a % m) / (b % m) % m。。这时,乘法逆就能够上场了。。一个数除以 b 后模 m,等价于该数乘以 b 模 m 的乘法逆后模 m。。于是上式可变成 a * b的乘法逆 % m,这就easy多了,就是
(a % m) * (b的乘法逆 % m) % m。。
怎么求乘法逆?要求 a 模 m 的乘法逆,设其为 x,由于 a * x % m = 1,所以 a * x + m * y = 1。。这是什么,一元二次方程,于是乎,扩展欧几里得飞一下就出来了。。
#include <cstdio> typedef long long LL; const int MOD = 1000003;
const int MAXN = 40000 + 10; int N, kase;
LL sum;
int pow2[MAXN]; void GetPow2()
{
pow2[0] = 1;
for (int i = 1; i < MAXN; ++i)
{
pow2[i] = (pow2[i - 1] << 1) % MOD;
}
} void Read()
{
int n; sum = 0;
scanf("%d", &N);
for (int i = 0; i < N; ++i)
{
scanf("%d", &n);
sum = (sum + pow2[n]) % MOD;
}
} void gcd(LL a, LL b, LL& d, LL& x, LL& y)
{
if (!b)
{
d = a;
x = 1;
y = 0;
return;
}
else
{
gcd(b, a % b, d, y, x);
y -= a / b * x;
}
} LL Inv(int a, int n)
{
LL ret, d, y; gcd(a, n, d, ret, y); return d == 1 ? (ret + n) % n : -1;
} void Solve()
{
LL ret;
LL inv = Inv(N, MOD);
ret = sum * inv % MOD;
printf("Case %d:%I64d\n", ++kase, ret);
} int main()
{
int T; kase = 0;
GetPow2();
scanf("%d", &T);
while (T--)
{
Read();
Solve();
} return 0;
}
hdu - 3049 - Data Processing(乘法逆元)的更多相关文章
- HDU 1452 (约数和+乘法逆元)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1452 题目大意:求2004^X所有约数和,结果mod 29. 解题思路: ①整数唯一分解定理: 一个 ...
- HDU 5651 计算回文串个数问题(有重复的全排列、乘法逆元、费马小定理)
原题: http://acm.hdu.edu.cn/showproblem.php?pid=5651 很容易看出来的是,如果一个字符串中,多于一个字母出现奇数次,则该字符串无法形成回文串,因为不能删减 ...
- HDU 1576 (乘法逆元)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1576 题目大意:求(A/B)mod 9973.但是给出的A是mod形式n,n=A%9973. 解题思 ...
- hdu 2669 Romantic (乘法逆元)
Romantic Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- HDU 5407(2015多校10)-CRB and Candies(组合数最小公倍数+乘法逆元)
题目地址:pid=5407">HDU 5407 题意:CRB有n颗不同的糖果,如今他要吃掉k颗(0<=k<=n),问k取0~n的方案数的最小公倍数是多少. 思路:首先做这道 ...
- Hdu 1452 Happy 2004(除数和函数,快速幂乘(模),乘法逆元)
Problem Description Considera positive integer X,and let S be the sum of all positive integer diviso ...
- HDU 4828 Grids(卡特兰数+乘法逆元)
首先我按着我的理解说一下它为什么是卡特兰数,首先卡特兰数有一个很典型的应用就是求1~N个自然数出栈情况的种类数.而这里正好就对应了这种情况.我们要满足题目中给的条件,数字应该是从小到大放置的,1肯定在 ...
- HDU 3923 Invoker(polya定理+乘法逆元(扩展欧几里德+费马小定理))
Invoker Time Limit : 2000/1000ms (Java/Other) Memory Limit : 122768/62768K (Java/Other) Total Subm ...
- 题解报告:hdu 1576 A/B(exgcd、乘法逆元+整数快速幂)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1576 Problem Description 要求(A/B)%9973,但由于A很大,我们只给出n(n ...
随机推荐
- 左右sqlplus一些方法用于汇总
SQL> select * from v$version where rownum=1; BANNER --------------------------------------------- ...
- HSV 量化
function L=hsvquan(hsv) %对HSV量化,该3维特征矢量: h=hsv(:,:,1); s=hsv(:,:,2); v=hsv(:,:,3); % 假设对HSV 空间进行适当的量 ...
- 理解JNDI中 java:comp/env/jdbc/datasource 与 jdbc/datasource 的不同之处(转)
在描述JNDI,例如获得数据源时,JNDI地址有两种写法,例如同是 jdbc/testDS 数据源: A:java:comp/env/jdbc/testDS B:jdbc/testDS 这两种写 ...
- SUPPORTDIR引用的文件的加入
上一篇转载了SUPPORTDIR的理论解释,如今截图说明实际操作: 选择依赖的语言,在右面的files框里右键点击,选择Insert Files插入文件,编译.由于安装得时候,压缩包会解压成一个暂时文 ...
- 跑Java -jar somefile.jar时会发生什么(一个)
最近阅读JVM源代码.一些想法写Blog分享.于是,他开了这么一个新课题. 第一篇文章取名字的时候让我很困惑,我代码的阅读是从Launcher開始入手的,也就是Java.exe(假设是windows平 ...
- 移动端 iphone touchmove滑到边界(浏览器地址拦及以上) touchend失效解决办法
在移动端h5页面:尤其那些全屏幕的盒展示切换页面,当用户无意中将手指滑到了 浏览器地址拦以上(中国移动这快区域):此时,手指已经离开屏幕了,但是ios上无法监听到touchend 事件:touchen ...
- 一个ajax的Post要求
<1> $.post(url,[data],[callback],[type]) 第一个参数是地址,第二个参数是一个参数传递.第三个参数是一个回调函数.參数是请求返回数据的类型 //一个a ...
- 【jQuery】使用JQ要准备的主要淡入淡出效果
jQuery是JavaScript 库.也就是JavaScript延期,加入满足不同效果的不断增长的需求.事实上质量JavaScript 下面写的一大JQ方案说明JQ. .基本目标 网页中有例如以下三 ...
- WinDbg调试.NET
WinDbg调试.NET程序入门 俗话说:万事开头难! 自从来到新公司遇到性能问题后,需要想办法解决这个问题,但是一直没有合适的性能分析工具,然后找到StevenChennet 大神帮忙,他用WinD ...
- NSIS:禁止多次安装实例
原文 NSIS:禁止多次安装实例 为了防止用户重复安装软件,我们可以加入以下的判断来进行限制. 第一步:在安装脚本中,将是否已安装的标记Installed写入注册表中: 1 Section -Post ...