正题

题目链接:https://darkbzoj.tk/problem/4589


题目大意

求有多少个长度为\(n\)的数列满足它们都是不大于\(m\)的质数且异或和为\(0\)。


解题思路

两个初始多项式\(F[0]=1\),\(G[prime\leq m]=1\),然后答案就是\(F\ xor\ G^n\)。然后\(\text{FWT}\)之后点值快速幂就好了。

时间复杂度\(O(n\log n)\)

\(\color{white}{写水题有助于背板}\)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=(1<<16)+10,P=1e9+7,inv2=(P+1)/2;
ll n,k,m,f[N],g[N];
bool v[N];
void FWT(ll *f,ll op){
if(op==-1)op=inv2;
for(ll p=2;p<=n;p<<=1)
for(ll k=0,len=p>>1;k<n;k+=p)
for(ll i=k;i<k+len;i++){
ll x=f[i],y=f[i+len];
f[i]=(x+y)*op%P;
f[i+len]=(x-y+P)*op%P;
}
return;
}
signed main()
{
while(scanf("%lld%lld",&k,&m)!=EOF){
memset(f,0,sizeof(f));
memset(g,0,sizeof(g));
memset(v,0,sizeof(v));
n=1;
while(n<=m)n<<=1;
for(ll i=2;i<=m;i++){
if(!v[i]){
f[i]=1;
for(ll j=i;j<=m;j+=i)
v[j]=1;
}
}
g[0]=1;
FWT(g,1);FWT(f,1);
while(k){
if(k&1){
for(ll i=0;i<n;i++)
g[i]=g[i]*f[i]%P;
}
for(ll i=0;i<n;i++)
f[i]=f[i]*f[i]%P;
k>>=1;
}
FWT(g,-1);
printf("%lld\n",g[0]);
}
return 0;
}

bzoj4589-Hard Nim【FWT】的更多相关文章

  1. BZOJ4589 Hard Nim 【FWT】

    题目链接 BZOJ4589 题解 FWT 模板题 #include<algorithm> #include<iostream> #include<cstdlib> ...

  2. POJ2975 Nim 【博弈论】

    DescriptionNim is a 2-player game featuring several piles of stones. Players alternate turns, and on ...

  3. LOJ2269 [SDOI2017] 切树游戏 【FWT】【动态DP】【树链剖分】【线段树】

    题目分析: 好题.本来是一道好的非套路题,但是不凑巧的是当年有一位国家集训队员正好介绍了这个算法. 首先考虑静态的情况.这个的DP方程非常容易写出来. 接着可以注意到对于异或结果的计数可以看成一个FW ...

  4. hdu6057 Kanade's convolution 【FWT】

    题目链接 hdu6057 题意 给出序列\(A[0...2^{m} - 1]\)和\(B[0...2^{m} - 1]\),求所有 \[C[k] = \sum\limits_{i \; and \; ...

  5. CSU1911 Card Game 【FWT】

    题目链接 CSU1911 题解 FWT模板题 #include<algorithm> #include<iostream> #include<cstdlib> #i ...

  6. [JZOJ6088] [BZOJ5376] [loj #2463]【2018集训队互测Day 1】完美的旅行【线性递推】【多项式】【FWT】

    Description Solution 我们考虑将问题一步步拆解 第一步求出\(F_{S,i}\)表示一次旅行按位与的值为S,走了i步的方案数. 第二步答案是\(F_{S,i}\)的二维重复卷积,记 ...

  7. Poj1704:staircase nim【博弈】

    题目大意:有一个无限长的一维的棋盘,棋盘上N个格子放置着棋子.两个人轮流操作,每次操作能选择其中一个棋子向左移动,但不能越过其它棋子或者两枚棋子放在同一格中,最后不能操作的人算输,问先手是否必胜? 思 ...

  8. 【杂题】[AGC034F] RNG and XOR【集合幂级数】【FWT】【DP】

    Description 你有一个随机数生成器,它会以一定的概率生成[0,2^N-1]中的数,每一个数的概率是由序列A给定的,Pi=Ai/sum(Ai) 现在有一个初始为0的数X,每一轮随机生成一个数v ...

  9. CF662C Binary Table【FWT】

    CF662C Binary Table 题意: 给出一个\(n\times m\)的\(01\)矩阵,每次可以反转一行或者一列,问经过若干次反转之后,最少有多少个\(1\) \(n\le 20, m\ ...

随机推荐

  1. Vamware没有卸载干净,导致无法重装,无法删除VMware旧版本,请与技术小组联系

    原因:注册表没有清理干净!!! 问题:把文件夹清理了n遍,却无法重装VMware,报错如标题. 原因:相关注册表没删完. 解决办法: - 1.创建一个.txt文本: - 2.将下面的内容复制到.txt ...

  2. Win10下安装SVN出现2503/2502解决方法

    出现错误的原因是权限不够 在win10的开始按钮上,右键点击,选择"命令提示符(管理员)(A)",弹出管理员身份运行模式的命令行的窗口,输入如下的命令: msiexec /pack ...

  3. ITIL学习笔记——ITIL入门小知识

    1. 什么是ITIL? ITIL即IT基础架构库(Information Technology Infrastructure Library)由英国政府部门CCTA(Central Computing ...

  4. Mysql 之 IFNULL(expr1,expr2) 对空不可判

    目标 当传入参数 @OrderId为空时 不做过滤 sql语句如下 SELECT o.* FROM `order` AS o LEFT JOIN receivemoneyconfirm AS re O ...

  5. Mac Ideal 常用快捷键

    智能提示 ⌘ -> command ⇧ -> shift ⌥ -> option -> 上箭头 -> 下箭头 ⌃ -> Control mac的option键  = ...

  6. Docker是简介

    Docker是什么  使用最广泛的开源容器引擎 一种操作系统级的虚拟化技术 依赖于Linux内核特性:Namespace(资源隔离)和Cgroups(资源限制) 一个简单的应用程序打包工具 D ...

  7. 测试工具Wiremock介绍

    WireMock是一个开源的测试工具,支持HTTP响应存根.请求验证.代理/拦截.记录和回放.最直接的用法: 为Web/移动应用构建Mock Service 快速创建Web API原型 模拟Web S ...

  8. Timer和TimerTask(转载)

    下面内容转载自: http://blog.csdn.net/xieyuooo/article/details/8607220 其实就Timer来讲就是一个调度器,而TimerTask呢只是一个实现了r ...

  9. 关于PLSQL中的一些问题总结:在PLSQL中书写DDL等

    关于问题前导,使用的数据表中涉及到的字段和类型: 在PLSQL中create.drop.truncate等DDL是没有办法直接执行的. 必须要使用: Execute immediate 'DDL语句' ...

  10. 高性能利器:CDN我建议你好好学一下!

    硬核干货分享,欢迎关注[Java补习课]成长的路上,我们一起前行 ! <高可用系列文章> 已收录在专栏,欢迎关注! CDN 概述 CDN 全称 Content Delivery Netwo ...