由题意可得出递推式\(f[i ,j]=\sum_{e\in S} f[i-1,\frac{j}{e}]\),初值\(f[0,0]=1\),答案为\(f[n,x]\),具体意义不表。

分析可知\(f[1,e(e\in S)]=1\),\(f[i,ab]=\sum_{a\in S,b\in S}f[i-1,a]f[1,b]\);

设模数\(m\)(指数)的一个原根为\(g\),构造\(e'=\log_g(e)\in S', e\in S\),改写递推式\(f[1,e'\in S']=1\),\(f[i,a'+b']=\sum_{a',b\in S'}f[i-1,a']f[1,b']\) 。就能套卷积做了*(^e^)*。

做法的正确性:因为\(g^i(0\le i<m-1)\)能取遍\([1,m-1]\)所有数,故\(e\in S\)都有存在唯一在\([0,m-1)\)里的离散对数。

于是此题就是离散快速傅利叶的模板了。

最后谈谈\(g\)的求法很暴力,枚举原根\(g\),然后小大枚举阶(阶的个数是\(O(\sqrt M)\)级的)来判断是否过早地产生循环,如下

int getG(int m) {vector<int> r;for(int i=2; i*i<=m-1; ++i) if((m-1)%i==0) {r.push_back(i);if(i*i!=m-1) r.push_back((m-1)/i);}sort(r.begin(),r.end());for(int i=2; ; ++i) {bool flag=1;for(auto rr: r) if(fpow(i,rr,m)==1) {flag=0; break;}if(flag) return i;}
}

就酱,实现留坑。

转载于:https://www.cnblogs.com/nosta/p/10568073.html

[SDOI2015] 序列统计相关推荐

  1. P3321 [SDOI2015]序列统计(离散对数下NTT,乘法换加法)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Weblink https://www.luogu.com.cn/problem/P3321 Prob ...

  2. Luogu P3321 [SDOI2015]序列统计

    [SDOI2015]序列统计 题目描述 小C有一个集合\(S\),里面的元素都是小于\(M\)的非负整数.他用程序编写了一个数列生成器,可以生成一个长度为\(N\)的数列,数列中的每个数都属于集合\( ...

  3. 洛谷 - P3321 [SDOI2015]序列统计(原根+NTT)

    题目链接:点击查看 题目大意:给出一个集合 SSS,集合中的数是 [0,m)[0,m)[0,m) 且互不相同的,问从集合中选 nnn 次数字,且乘积对 mmm 取模后等于 xxx 的方案数有多少 题目 ...

  4. P3321 [SDOI2015]序列统计(未解决)

    P3321 [SDOI2015]序列统计 题意: 题解: 参考题解: 题解 P3321 [[SDOI2015]序列统计] [LG3321][SDOI2015]序列统计 神仙题..学透再补 代码:

  5. [SDOI2015]序列统计

    [SDOI2015]序列统计 很有趣的一道题目,很巧妙. 显然是一个dp,考虑最朴素的dp,f[i][j]表示选i个乘起来,%m为j的方案数为多少.转移也很简单. 然而乘法的转移并不能进行什么优化,于 ...

  6. 算法学习FFT系列(2):快速数论变换NTT bzoj3992: [SDOI2015]序列统计例题详解

    bzoj3992: [SDOI2015]序列统计 Description 小C有一个集合S,里面的元素都是小于M的非负整数.他用程序编写了一个数列生成器,可以生成一个长度为N的数列,数列中的每个数都属 ...

  7. BZOJ3992[SDOI2015]序列统计

    题目链接 洛谷 BZOJ 解析 头一回知道原根还可以这么考-- 不难想到递推的做法\(dp[i][j]\)表示长度为\(i\),乘积为\(j\)的答案,那么\(dp[i][j \cdot a[i] \ ...

  8. P3321 [SDOI2015]序列统计

    思路 首先有个挺显然的DP \[ dp[i][(j*k)\%m]+=dp[i-1][j]\times dp[i-1][k] \] 想办法优化这个DP 这个dp也可以写成这样 \[ dp[i][j]=\ ...

  9. BZOJ3992:[SDOI2015]序列统计——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=3992 https://www.luogu.org/problemnew/show/P3321 小C ...

  10. BZOJ 3992 [SDOI2015]序列统计

    数列长度到了109,转移矩阵边长n到了8000,除了FFT还能怎么写??!! 当然,这题由于取模,必须用NTT. 同时由于取得是乘积,所以用m的原根来搞,每次NTT完了,把后面的部分加到前面去. 注意 ...

最新文章

  1. 手动部署OpenStack环境(五:新建网络及部署虚拟机)
  2. 第2关:实现一个链接存储的栈
  3. Python中的split,rsplit,splitlines
  4. 基于注解的SpringMVC整合JPA
  5. 2020 ICPC 济南 F. Gcd Product
  6. 域控服务器取消验证_AD域控
  7. python网格搜索优化参数_python – 是否有可能通过网格搜索调整参数scikit-learn中的自定义内核?...
  8. 这篇文章是我用AI生成出来的
  9. 【Python实例第8讲】模型复杂度影响
  10. 车辆属性识别、车型识别
  11. 超级电容的电压均衡板
  12. Opencv学习笔记 - 使用opencvsharp和支持向量机
  13. 良田摄像头 linux,良田万能摄像头高拍仪驱动下载|良田万能摄像头驱动 官方版 - 软件下载 - 绿茶软件园|33LC.com...
  14. 各大搜索引擎Ping服务 php实现方法
  15. 用Qt实现Q-M算法化简逻辑表达式及Qt项目打包发布方法
  16. (二)ubuntu下安装Amd RX470驱动
  17. armbian清理_N1的ArmbianOpenMediaVault笔记
  18. 英雄联盟LOL用什么语言写的?
  19. 代码注释如此沙雕,会玩还是你们程序员!
  20. android与pc的连接

热门文章

  1. shell取mysql字段_shell 脚本中获取mysql多个字段的值
  2. Maven Oracle JDBC
  3. Java中只存在值传递
  4. 布鲁斯的秘密-序章:我是布鲁斯
  5. 2015年1月微信上线原创声明功能:智能添加原创标识 转载自动注明出处
  6. 转:NAT traversal 的概念
  7. KUBERNETES存储之PERSISTENT VOLUMES简介
  8. AS3连接MYSQL数据库
  9. [Stage3D]硬件加速的径向模糊
  10. spark-dataframe与rdd的区别