#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. 记录pycharm快捷键出错的其中一个原因

    #pycharm使用小技巧  最近在使用pycharm,所遇到的一些快捷键失效的问题.如ctrl+c,ctrl+v等:包括键入时,总是需要用“i”来实现等问题.  究其缘故,是在安装pycharm时, ...

  2. JQuery案例一:实现表格隔行换色

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. 20. Valid Parentheses ★

    题目内容: Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if th ...

  4. python中文件读写

    读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘, ...

  5. Java——值传递与引用传递

    1.基本类型和引用类型在内存中的保存 (1)基本类型的变量保存原始值,即它代表的值就是数值本身:   基本类型在声明变量时就为它分配了空间:   基本类型在参数传递过程中属于值传递,也就是复制一份数据 ...

  6. js(含有for if函数)

    1.在定义变量时,尽可能让变量的访问范围最小化 2.弹出单选性别,嵌套for和if函数 <script type="application/javascript">   ...

  7. Timer 的学习

    Timer 实例化多个对象就会启动多个线程 TimerTask 中 捕获异常为基类Exception,那么出现异常后就继续执行.及时报错 TimerTask中未捕获异常或者捕获异常与程序抛出异常不一致 ...

  8. hibernate学习以及文件以及注释

    <?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configuration PUBLIC "-//Hib ...

  9. 自学python之路(day6)

    一 函数的定义与调用 现在需要一个程序来实现len()的功能. 计算字符串 s 长度 s='好好学习' #函数的定义def my_len(): i = for k in s: i += print(i ...

  10. mssqlserver超级班助类 带详细用法

    using System; using System.Collections; using System.Collections.Generic; using System.Configuration ...