#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=5e4+;
const int mod=1e9+;
const int MOD=1e9+;
const int inv2=5e8+;
int a[<<],b[<<],N;
int n,m;
bool vis[maxn];
int prime[maxn];
int tot=;
void get_prime() // prime=0;else 1;
{
vis[]=;
for(int i=;i<maxn;i++)
{
if(!vis[i]) prime[tot++]=i;
for(int j=;j<tot && i*prime[j]<maxn;j++)
{
vis[i*prime[j]]=;
if(i%prime[j]==) break;
}
} //for(int i=0;i<=40;i++) cout<<prime[i]<<endl;
}
void FWT(int *P,int opt)
{
for(int i=;i<=N;i<<=)
for(int p=i>>,j=;j<N;j+=i)
for(int k=j;k<j+p;++k)
{
int x=P[k],y=P[k+p];
P[k]=(x+y)%MOD;P[k+p]=(x-y+MOD)%MOD;
if(opt==-)P[k]=1ll*P[k]*inv2%MOD,P[k+p]=1ll*P[k+p]*inv2%MOD;
}
}
void fpow(int *a,int *b,int p)
{
FWT(a,);
FWT(b,);
while(p)
{
if(p&)for(int i=;i<N;++i)b[i]=1ll*b[i]*a[i]%MOD;
for(int i=;i<N;++i)a[i]=1ll*a[i]*a[i]%MOD;
p>>=;
}
FWT(b,-);
}
int main()
{
get_prime();
while(scanf("%d %d",&n,&m)!=EOF)
{
N=; while(N<=m) N=N<<;
memset(a,,sizeof(a));
memset(b,,sizeof(b));
for(int i=;i<=m;i++) if(!vis[i]) a[i]=b[i]=;
fpow(a,b,n-);
printf("%d\n",b[]);
}
return ;
}

bzoj 4589 FWT的更多相关文章

  1. BZOJ 4589 Hard Nim(FWT+博弈论+快速幂)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4589 [题目大意] 有n堆石子,每堆都是m以内的质数,请问后手必胜的局面有几种 [题解 ...

  2. bzoj 4589 Hard Nim——FWT

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4589 一开始异或和为0的话先手必败.有 n 堆,每堆可以填那些数,求最后异或和为0的方案数, ...

  3. bzoj 4589 Hard Nim —— FWT

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4589 先手必败,是一开始所有石子的异或和为0: 生成函数 (xpri[1] + xpri[2 ...

  4. FWT [BZOJ 4589:Hard Nim]

    4589: Hard Nim Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 275  Solved: 152[Submit][Status][Disc ...

  5. BZOJ.4589.Hard Nim(FWT)

    题目链接 FWT 题意即,从所有小于\(m\)的质数中,选出\(n\)个数,使它们异或和为\(0\)的方案数. 令\(G(x)=[x是质数]\),其实就是对\(G(x)\)做\(n\)次异或卷积后得到 ...

  6. BZOJ 4589 Hard Nim(FWT加速DP)

    题目链接  Hard Nim 设$f[i][j]$表示前$i$个数结束后异或和为$j$的方案数 那么$f[i][j] = f[i-1][j$ $\hat{}$ $k]$,满足$k$为不大于$m$的质数 ...

  7. BZOJ 4589 Hard Nim ——FWT

    [题目分析] 位运算下的卷积问题. FWT直接做. 但还是不太民白,发明者要承担泽任的. [代码] #include <cstdio> #include <cstring> # ...

  8. bzoj 4589: Hard Nim【线性筛+FWT+快速幂】

    T了两次之后我突然意识到转成fwt形式之后,直接快速幂每次乘一下最后再逆回来即可,并不需要没此次都正反转化一次-- 就是根据nim的性质,先手必输是所有堆个数异或和为0,也就变成了一个裸的板子 #in ...

  9. [BZOJ 4589]Hard Nim

    Description 题库链接 两人玩 \(nim\) 游戏,\(n\) 堆石子,每堆石子初始数量是不超过 \(m\) 的质数,那么后手必胜的方案有多少种.对 \(10^9+7\) 取模. \(1\ ...

随机推荐

  1. MSSQL2005-由嵌套失误感受到的强大智能优化功能

    在统计一组数据时用到了子查询(子查询用到了count,父查询用了sum) 后语句优化为无子查询 但是跟踪两次的执行计划和IO统计,发现 1.有子查询时扫描计数和逻辑读取远高于无子查询的语句 2.无子查 ...

  2. selenium 分布式 [WinError 10061] 由于目标计算机积极拒绝

    selenium grid分布式,老是出现[WinError 10061] 由于目标计算机积极拒绝的问题 网上查了一圈,出现积极拒绝大概是代理问题, 捣鼓了一圈,还是不行 想到fiddler自动侦听了 ...

  3. vim详解

    vim介绍: 1.vim是vi的升级版本 2.vim是带有颜色显示的 3.vim三个模式:一般模式.编辑模式.命令模式 最小化模式下默认是没有安装vim的: [root@linux-xl ~]# yu ...

  4. tcp 与udp 的区别

    1.TCP和UDP对比 TCP(Transmission Control Protocol)可靠的.面向连接的协议(eg:打电话).传输效率低全双工通信(发送缓存&接收缓存).面向字节流.使用 ...

  5. Linux 操作系统目录结构

    /  根目录 # ls /bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp  var bin - ...

  6. spring boot 包jar运行

    win根目录下执行 mvn install 生成 可运行jar使用java -jar jar名字 执行项目 ps aux|grep demo.jar  查看进程 kill -9 processid 杀 ...

  7. 简单透析cookies,sessionStorage和localStorage

    首先大致说一下 1.sessionStorage是会话层的一种存储方式,当会话关闭或者退出,sessionStorage就会被清除,有效期较短 2.localStorage是浏览器提供的本地存储方式, ...

  8. Chisel插件

    http://blog.csdn.net/yj_sail/article/details/54897475 https://blog.cnbluebox.com/blog/2015/03/05/chi ...

  9. 安装Python mysqlclient出现“OSError: mysql_config not found”错误

    问题:               使用Python3开发一个管理平台,用MySQL数据库存放元数据.使用pip安装mysqlclient模块时出现“OSError: mysql_config not ...

  10. WCF分布式3-InstanceContext和ConcurrencyMode

    WCF中,如果将实现契约(接口)的服务配置默认为 InstanceContextMode = InstanceContextMode.Single, 也就是说这个服务对象,客户端调用这个对象的接口时, ...