【题目链接】 http://www.lydsy.com/JudgeOnline/problem.php?id=4589

【题目大意】

  有n堆石子,每堆都是m以内的质数,请问后手必胜的局面有几种

【题解】

  后手必胜,则sg为0,那么就是求n个m以内的数xor为0的情况有几种,
  首先筛出素数,保存素数的个数数组,利用FWT计算c[i^j]=a[i]*b[j],
  计算n次的结果逆向变化回来就是最终的sg个数数组,
  在计算n次c[i]=a[i]*b[i]的过程中,等价于计算c[i]=a[i]^n,
  这里我们可以用快速幂优化一个log。

【代码】

#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long LL;
const int N=100000;
const LL mod=1e9+7;
LL a[N],u;
int p[N],n,m;
void FWT(LL*a,int n){
for(int d=1;d<n;d<<=1)for(int m=d<<1,i=0;i<n;i+=m)for(int j=0;j<d;j++){
LL x=a[i+j],y=a[i+j+d];
a[i+j]=(x+y)%mod,a[i+j+d]=(x-y+mod)%mod;
}
}
void UFWT(LL*a,int n){
for(int d=1;d<n;d<<=1)for(int m=d<<1,i=0;i<n;i+=m)for(int j=0;j<d;j++){
LL x=a[i+j],y=a[i+j+d];
a[i+j]=(x+y)%mod*u%mod,a[i+j+d]=(x-y+mod)%mod*u%mod;
}
}
LL pow(LL a,LL b,LL p){LL t=1;for(a%=p;b;b>>=1LL,a=a*a%p)if(b&1LL)t=t*a%p;return t;}
int main(){
for(int i=2;i<=50000;i++)p[i]=1;
for(int i=2;i<=50000;i++)if(p[i]){
for(int j=2;i*j<=50000;j++)p[i*j]=0;
}u=pow(2,mod-2,mod);
while(~scanf("%d%d",&n,&m)){
int len=1;while(len<=m)len<<=1;
for(int i=0;i<len;i++)a[i]=p[i]&(i<=m);
FWT(a,len);
for(int i=0;i<len;i++)a[i]=pow(a[i],n,mod);
UFWT(a,len);
printf("%lld\n",a[0]);
}return 0;
}

最新文章

  1. console.log(&quot;A&quot;-&quot;B&quot;+&quot;3&quot;)=?
  2. Salesforce ADM201备考心得
  3. ThinPHP命名空间,连接数据库是要修改的配置文件,Model数据模型层,跨控制器调用,如何获取系统常量信息,
  4. error while loading shared libraries:错误的原因和解决方法
  5. [转]linux /proc/cpuinfo 文件分析
  6. specify a file path to store the seed
  7. iOS开发笔记8:Remote Notification远程消息推送处理
  8. invalid types &#39;int[int]&#39; for array subscrip
  9. struts2学生信息管理系统篇章①
  10. Java 局部变量、实例变量、类变量(静态变量)区别
  11. Linux(Ubuntu) OpenGL 开发环境
  12. Win32线程——等待另一个线程结束
  13. python-day6面向对象、类的继承
  14. 「CodeForces - 50C 」Happy Farm 5 (几何)
  15. Spring 工具包
  16. openvino program
  17. mqtt 客户端 基于Python
  18. [转]mysql在已有无分区表增加分区,mysql5.5才有,可以是innodb_file_per_table关闭状态.
  19. Maven 入门指南
  20. activiti并行和串行区别

热门文章

  1. jQuery mobile 滑动打开面板
  2. sass_安装问题(ERROR: Could not find a valid gem &#39;sass&#39; (&gt;= 0), here is why: Unable to download data from https://rubygems.org/ - SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: cert)
  3. Django【设计】可插拔的插件方式实现
  4. 浅谈C语言中的强符号、弱符号、强引用和弱引用【转】
  5. 64_l1
  6. 微信小程序使用canvas绘制图片的注意事项
  7. saltstack安装和配置
  8. 百度笔试题:malloc/free与new/delete的区别(转)
  9. windows server 2012 IIS配置之FTP站点
  10. 使用在线修改DDL工具