bzoj 3823: 定情信物 线性筛逆元
3823: 定情信物
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 108 Solved: 2
[Submit][Status]
Description
都说程序员找不到妹子,可是无人知晓,三生石上竟然还刻着属于小 E 的一笔。
那一天,小 E 穷尽毕生的积蓄,赠与了妹子一个非同寻常的定情信物。那是一个小
小的正方体,但透过它,可以看到过去,可以洞彻天机。
这份信物仿佛一只深邃的眼。当看透它看似简单的外表后,深邃的内心却最是可以
叩击人的灵魂的。不出所料,妹子果然被这个信物超越空间的美所吸引。
“易有太极,是生两仪,两仪生四象,四象生八卦。,八卦定吉凶,吉凶生大业。”
这句箴言在其上得到了完美的诠释。
是的,这正是一个超正方体。
小 E 告诉妹子,他的情意也如这份信物一样深厚。现在妹子想知道,小 E 对她的情
意究竟有几分?
我们知道,点动成线,线动成面,面动成体......即 n 维超立方体可看作由 n-1 维超
立方体沿垂直于它的所有的棱的方向平移得到的立体图形。
我们可以将点看作 0 维超立方体,将直线看作 1 维超立方体,将正方形看作 2 维超
立方体......依此类推。
任何一个 n 维超立方体(n>0)都是由低维的超立方体元素组成的:它的 n-1 维表面
是 n-1 维的超立方体,它的 n-2 维边缘是 n-2 维的超立方体,它的 n-3 维元素是 n-3 维的
超立方体......
小 E 对妹子的情意即为在他的定情信物——K 维超立方体中,含有每一维的元素个
数。由于元素个数可能较大,只需要输出它所包含的每一维元素个数模 P 后的异或和。
Input
两个整数 K、P,详见题目叙述。
Output
一个非负整数,表示小 E 的定情信物所包含的每一维元素个数模 P 后的异或和。注
意:异或和可能会大于 P。
Sample Input
3 7
Input 2
4 2333
Input 3
12 7723
Sample Output
3
Output 2
33
Output 3
360
Hint
对于样例2的解释:
一个三维超立方体含有 8 个零维元素、12 个一维元素、6 个二维元素、1 个三维
元素,模 7 后分别为 1,5,6,1,异或和为 1^5^6^1=3。
HINT
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
#define MAXN 11000000
typedef long long qword;
int inv[MAXN];
int prime[],topp=-;
bool pflag[MAXN];
qword n,p;
qword pow_mod(qword x,qword y)
{
qword ret=;
while (y)
{
if (y&)ret=ret*x%p;
x=x*x%p;
y>>=;
}
return ret;
}
void init()
{
inv[]=;
for (int i=;i<=n;i++)
{
if (!pflag[i])
{
prime[++topp]=i;
inv[i]=pow_mod(i,p-);
}
for (int j=;j<=topp && (qword)i*prime[j]<MAXN;j++)
{
pflag[i*prime[j]]=true;
inv[i*prime[j]]=(qword)inv[i]*inv[prime[j]]%p;
if (i%prime[j]==)break;
}
}
}
int main()
{
freopen("input.txt","r",stdin);
scanf("%lld%lld",&n,&p);
qword x,y,z;
int i,j,k;
qword ans=;
init();
x=;y=;
ans^=x*y%p;
int totp=;
for (i=;i<=n;i++)
{
x=x*%p;
z=n-i+;
while (z%p==)totp++,z/=p;
y=y*z%p;
z=i;
while (z%p==)totp--,z/=p;
y=y*inv[z%p]%p;
ans^=totp?:x*y%p;
}
printf("%lld\n",ans);
}
bzoj 3823: 定情信物 线性筛逆元的更多相关文章
- [BZOJ 3823]定情信物
题面 定情信物 题解 这题主要考高中物理和数学. 首先定义 \(f[i][j]\) 表示 \(i\) 维超立方体中第 \(j\) 维元素的数量,根据实际意义,我们可以推出递推式: \(f[i][j]= ...
- 定情信物(bzoj 3823)
Description 都说程序员找不到妹子,可是无人知晓,三生石上竟然还刻着属于小 E 的一笔. 那一天,小 E 穷尽毕生的积蓄,赠与了妹子一个非同寻常的定情信物.那是一个小 小的正方体,但透过它, ...
- BZOJ 2693: jzptab [莫比乌斯反演 线性筛]
2693: jzptab Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1194 Solved: 455[Submit][Status][Discu ...
- [bzoj 2190][SDOI2008]仪仗队(线性筛欧拉函数)
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2190 分析:就是要线性筛出欧拉函数... 直接贴代码了: memset(ans,,sizeof ...
- BZOJ3823 : 定情信物
n维超立方体有$2^{n-i}C_n^i$个i维元素,于是$O(n)$预处理出1到n的逆元,再$O(n)$计算即可. 注意Trick:P可能小于n,所以要将数字表示成$a\times P^b$的形式. ...
- BZOJ 2694: Lcm [莫比乌斯反演 线性筛]
题意:求\(\sum\limits_{i=1}^n \sum\limits_{j=1}^m lcm(i,j)\ : gcd(i,j) 是sf 无平方因子数\) 无平方因子数?搞一个\(\mu(gcd( ...
- hdu5673 Robot 卡特兰数+组合数学+线性筛逆元
Robot Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Subm ...
- bzoj 4589: Hard Nim【线性筛+FWT+快速幂】
T了两次之后我突然意识到转成fwt形式之后,直接快速幂每次乘一下最后再逆回来即可,并不需要没此次都正反转化一次-- 就是根据nim的性质,先手必输是所有堆个数异或和为0,也就变成了一个裸的板子 #in ...
- Bzoj 2186: [Sdoi2008]沙拉公主的困惑 乘法逆元,线性筛,欧拉函数,数论
2186: [Sdoi2008]沙拉公主的困惑 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 2560 Solved: 857[Submit][St ...
随机推荐
- iOS开发简单高效的数据存储
在iOS开发过程中,不管是做什么应用,都会碰到数据保存的问题,你是用什么方法来持久保存数据的?这是在几乎每一次关于iOS技术的交流或讨论都会被提到的问题,而且大家对这个问题的热情持续高涨.本文主要从概 ...
- .Net设计模式_原型模式
引言: 原型,感觉就是拷贝,只是给拷贝分了深拷贝和浅拷贝. 理解: 在C#.Net里面,我们可以很容易的通过Clone()方法实现原型模式. 任何类,只要想支持克隆,必须实现C#中的ICloneabl ...
- windows 下 node 多版本管理工具 - gnvm
最近写了各个构建工具, 开发环境为mac,需要在windows下测试通过: 因为很久不用windows,windows下的node 版本还是 0.10.* 的,因此决定升级node mac 下我使用的 ...
- iOS之苹果和百度地图的使用
iOS中使用较多的3款地图,google地图.百度地图.苹果自带地图(高德).其中苹果自带地图在中国使用的是高德的数据.苹果在iOS 6之后放弃了使用谷歌地图,而改用自家的地图.在国内使用的较多的就是 ...
- Linq to SQL只支持SQL Server(所选对象使用不支持的数据提供程序)
- MySQL5.7.12新密码登录方式及密码策略
在Centos6.6上安装MySQL5.7.12时,遇到了一个问题 安装后在/root目录下没有发现有.mysql_secret这个文件,所以没有没法按照官方文档上说的那样使用,这里记录下, 解决方式 ...
- Optimal Logging
by Anthony Vallone How long does it take to find the root cause of a failure in your system? Five mi ...
- webform 转 MVC 飞一般的感觉
前言: 浅谈webform与mvc,让开发变得更加简单,这里主要通过比较webform与mvc的开发方式,以下全属个人看法,不完善的地方可以留言补充. 正文: 废话不多说,直接说工作中经常用到的地方 ...
- android studio环境搭建-笔记1
自己干了几年测试(功能性的),最近比较闲,就自己学习下android(以前也有所接触,但那是几年前的一点皮毛,都忘记了). 先搭建谷歌推出的android studio(以前用eclipse搭建总觉得 ...
- Js~数组的操作push,pop,shift,unshift
说几个概念: 队列:先进先出堆栈:先进后出 shift:从集合中把第一个元素删除,返回这个元素的值pop:从集合中把最后一个元素删除,返回这个元素的值 unshift:在集合开头添加一个或者多个元素, ...