题目链接

FWT

题意即,从所有小于\(m\)的质数中,选出\(n\)个数,使它们异或和为\(0\)的方案数。

令\(G(x)=[x是质数]\),其实就是对\(G(x)\)做\(n\)次异或卷积后得到多项式的第\(0\)项。

如果\(n\)很小,可以一次次的FWT。事实上在第一次FWT之后,直接快速幂就行了,不需要中间IFWT转回去。

  1. //1652kb 4352ms
  2. #include <cstdio>
  3. #include <cctype>
  4. #include <cstring>
  5. #include <algorithm>
  6. #define gc() getchar()
  7. #define inv2 500000004
  8. #define mod 1000000007
  9. #define Add(x,y) (x+y>=mod?x+y-mod:x+y)
  10. #define Sub(x,y) (x<y?x-y+mod:x-y)
  11. typedef long long LL;
  12. const int N=65540;
  13. int not_P[N],P[N>>2];
  14. inline int read()
  15. {
  16. int now=0;register char c=gc();
  17. for(;!isdigit(c);c=gc());
  18. for(;isdigit(c);now=now*10+c-'0',c=gc());
  19. return now;
  20. }
  21. void Init(int n)
  22. {
  23. not_P[1]=1;
  24. for(int i=2,cnt=0; i<=n; ++i)
  25. {
  26. if(!not_P[i]) P[++cnt]=i;
  27. for(int j=1; j<=cnt&&i*P[j]<=n; ++j)
  28. {
  29. not_P[i*P[j]]=1;
  30. if(!(i%P[j])) break;
  31. }
  32. }
  33. }
  34. void FWT(int *a,int lim,int opt)
  35. {
  36. for(int i=2; i<=lim; i<<=1)
  37. for(int j=0,mid=i>>1; j<lim; j+=i)
  38. for(int k=j,x,y; k<j+mid; ++k)
  39. {
  40. x=a[k],y=a[k+mid];
  41. a[k]=Add(x,y), a[k+mid]=Sub(x,y);
  42. if(opt==-1) a[k]=1ll*a[k]*inv2%mod, a[k+mid]=1ll*a[k+mid]*inv2%mod;
  43. }
  44. }
  45. void FP(int *x,int *t,int n,int k)
  46. {
  47. for(; k; k>>=1)
  48. {
  49. if(k&1) for(int i=0; i<n; ++i) t[i]=1ll*t[i]*x[i]%mod;
  50. for(int i=0; i<n; ++i) x[i]=1ll*x[i]*x[i]%mod;
  51. }
  52. }
  53. int main()
  54. {
  55. static int A[N],res[N];
  56. Init(50000);
  57. int n,m;
  58. while(~scanf("%d%d",&n,&m))
  59. {
  60. memset(A,0,sizeof A);
  61. for(int i=1; i<=m; ++i) A[i]=!not_P[i];
  62. int lim=1; while(lim<=m) lim<<=1;
  63. FWT(A,lim,1);
  64. for(int i=0; i<lim; ++i) res[i]=A[i];
  65. FP(A,res,lim,n-1), FWT(res,lim,-1);
  66. printf("%d\n",res[0]);
  67. }
  68. return 0;
  69. }

BZOJ.4589.Hard Nim(FWT)的更多相关文章

  1. bzoj 4589 Hard Nim——FWT

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

  2. bzoj 4589 Hard Nim —— FWT

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

  3. BZOJ 4589 Hard Nim ——FWT

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

  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+博弈论+快速幂)

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

  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+快速幂】

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

  8. [BZOJ 4589]Hard Nim

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

  9. bzoj 4589 FWT

    #include<bits/stdc++.h> #define ll long long using namespace std; ; ; ; ; <<],b[<< ...

随机推荐

  1. (原)tensorflow中使用指定的GPU及GPU显存

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/6591923.html 参考网址: http://stackoverflow.com/questions ...

  2. python3之协程

    1.协程的概念 协程,又称微线程,纤程.英文名Coroutine. 线程是系统级别的它们由操作系统调度,而协程则是程序级别的由程序根据需要自己调度.在一个线程中会有很多函数,我们把这些函数称为子程序, ...

  3. saltStack的event接口通过mysql数据库接收SaltStack批量管理日志

    event是一个本地的ZeroMQ PUB Interface,event是一个开放的系统,用于发送信息通知salt或其他的操作系统.每个event都有一个标签.事件标签允许快速制定过滤事件.除了标签 ...

  4. HTTP SIP 认证

    HTTP请求报头: Authorization HTTP响应报头: WWW-Authenticate   HTTP认证  基于  质询  /回应(  challenge/response)的认证模式. ...

  5. Python-CSS进阶

    0. 什么时候该用什么布局 <!-- 定位布局: 以下两种布局不易解决的问题, 盒子需要脱离文档流处理 --> <!-- 浮动布局: 一般有block特性的盒子,水平排列显示 --& ...

  6. js几种创建对象的方式

    javascript是一种“基于prototype的面向对象语言“,与java有非常大的区别,无法通过类来创建对象.那么,既然是面象对象的,如何来创建对象呢? 一.通过”字面量“方式创建. 方法:将成 ...

  7. python之类中的super函数

    作用 实现代码重用 思考:super真的只是调用父类么? super函数是按照mro算法去调用的,不bb上代码: class A: def __init__(self): print('A') cla ...

  8. webpack中require和import的区别

    commonjs同步语法 经典的commonjs同步语法如下: var a = require('./a'); a.show(); 此时webpack会将a.js打包进引用它的文件中.这是最普遍的情形 ...

  9. wpf 加阴影效果导致内容模糊的问题解决

    这个和GPU有关,参考地址 https://www.cplotts.com/2009/02/25/gpu-effects-blurry-text/ 产生问题的代码如下: <Window x:Cl ...

  10. hdu5178 尺取

    会爆int /* 给定数轴上一些点对,问有多少点对之间的距离差不超过k 点对排序后尺取法:枚举每个左边界,找到一个右边界使得 */ #include<bits/stdc++.h> #def ...