题意: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;
}

最新文章

  1. 超详细的java反射教程
  2. Dynamic CRM 2013学习笔记(四十一)流程4 - 异步工作流(Workflow)用法图解
  3. 安装SQL Server2008,要重启机器,解决办法
  4. Inheritance
  5. 如何在cocos2dx lua的回调函数里面用self
  6. object c小代码——日期篇
  7. HDU 2588 GCD
  8. Spring配置文件模板
  9. java基础解析系列(六)---深入注解原理及使用
  10. CTF---Web入门第二题 上传绕过
  11. dubbo源码—Service Reply
  12. ●洛谷P2934 [USACO09JAN]安全出行Safe Travel
  13. table td中的内容过长,显示为固定长度,多余部分用省略号显示
  14. C# 跨进程 设置窗口owner
  15. CSP中的选择
  16. Percona MySQL 5.7 Linux通用二进制包安装(CentOS 6)
  17. Oracle常用函数——COALESCE
  18. P2617 Dynamic Rankings(带修主席树)
  19. Linux快速安装apache+mysql+php环境
  20. 【数据库】悲观锁与乐观锁与MySQL的MVCC实现简述

热门文章

  1. 生产都消费者模式的一个demo,消费者设置缓存
  2. hdoj 2063 过山车 【双边匹配匈牙利算法】
  3. Java线
  4. js 自己容易搞混的笔记查询
  5. Centos 7 学习加入用户
  6. 【本&#183;伍德Lua专栏】补充的基础09:使用table.concat将一个大的字符串
  7. SQL Server审计功能入门:SQL Server审核 (SQL Server Audit)
  8. SharePoint Search之(两)持续抓取Continues crawl
  9. CentOS7 安装zookeeper
  10. redis安装和配置教程phpredis扩展安装测试