博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 4589 Hard Nim
阅读量:7082 次
发布时间:2019-06-28

本文共 1798 字,大约阅读时间需要 5 分钟。

题目链接

题解

F(0)F(0)FF满足

F=PnF=Pn

其中P(i)=[iprime]P(i)=[i∈prime],卷积为集合对称差卷积。

先线筛求出PP,FWT一下,对每个元素快速幂,最后FWT回去,输出F(0)F(0)

代码

#include 
#include
const int maxn=280000;const int mod=1000000007;const int inv_2=500000004;int p[maxn+10],prime[maxn+10],cnt,n;int getprime(){ p[1]=1; for(int i=2; i<=maxn; ++i) { if(!p[i]) { prime[++cnt]=i; } for(int j=1; (j<=cnt)&&(i*prime[j]<=maxn); ++j) { p[i*prime[j]]=1; if(i%prime[j]==0) { break; } } } return 0;}int quickpow(int a,int b,int m){ int res=1; while(b) { if(b&1) { res=1ll*res*a%m; } a=1ll*a*a%m; b>>=1; } return res;}int add(int a,int b,int m){ int res=a+b; if(res>=m) { res-=m; } return res;}int minus(int a,int b,int m){ int res=a-b; if(res<0) { res+=m; } return res;}int fwt_xor(int *s,int len,int op){ for(int i=2; i<=len; i<<=1) { for(int j=0; j
>1); ++k) { int x=s[j+k],y=s[j+k+(i>>1)]; s[j+k]=add(x,y,mod); s[j+k+(i>>1)]=minus(x,y,mod); if(op==-1) { s[j+k]=1ll*s[j+k]*inv_2%mod; s[j+k+(i>>1)]=1ll*s[j+k+(i>>1)]*inv_2%mod; } } } } return 0;}int getrev(int x){ int res=1; while(x>=res) { res<<=1; } return res;}int a[maxn+10],m,k;int main(){ getprime(); while(scanf("%d%d",&k,&n)!=EOF) { m=getrev(n); memset(a,0,sizeof a); for(int i=1; i<=n; ++i) { if(!p[i]) { a[i]=1; } } fwt_xor(a,m,1); for(int i=0; i

转载于:https://www.cnblogs.com/Canopus-wym/p/10376152.html

你可能感兴趣的文章
有赞业务对账平台的探索与实践
查看>>
【Java基本功】一文读懂String及其包装类的实现原理
查看>>
leetcode讲解--824. Goat Latin
查看>>
深入解析Node.js中的Async和Await函数
查看>>
Ubuntu 下如何安装与卸载软件 ( 一 :GUI版)
查看>>
07_01_定义加载器(Webpack Book)
查看>>
Let's encrypt 通配域名DNS验证方式的证书自动更新
查看>>
PHP 框架学习(二):Laravel
查看>>
总结常见的违背Rest原则的接口设计做法
查看>>
JAVASCRIPT中THIS指的是什么?
查看>>
推荐一个全新的简单可扩展的基于MVC模式开发的PHP CMS系统:metacms
查看>>
基于 Laravel 的模块化开发框架
查看>>
将Medium中的博客导出成markdown
查看>>
D-Bus Tutorial
查看>>
Spring中的事务控制
查看>>
Promise的简单实现
查看>>
我的豆瓣短评爬虫的多线程改写
查看>>
netfilter 结构整理
查看>>
Golang TcpProxy和Nodejs TcpProxy
查看>>
『总结』jQuery常用函数方法
查看>>