题意:

给定n个数a1,a2····an,依次求出相邻两个数值和,将得到一个新数列,重复上述操作,最后结果将变为一个数,问这个数除以m的余数与那些数无关?

例如n=3,m=2时,第一次得到a1+a2,a2+a3,再求和得到a1+2*a2+a3,它除以2的余数和a2无关。1=<n<=10^5, 2=<m<=10^9

解法:

将所有的加法过程列出来可以得到,n个数合并成1个数需要n-1步,且最后的表达式写成初始项相加的形式 每一项的系数恰好就是一个二项式系数。

问除以m的余数与那些数无关,其实就是问这些因子中哪些是m的倍数。我们还是用分解m质因子的方法,将m的质因子全部先分解出来,然后遍历每个二项式系数,看他们能否整除这些质因子(如果这个二项式系数改写成质因子的幂次形式,的这个幂小于m中的这个幂,就不行) 。

除此之外还要学习的就是怎么计算这个幂次,尤其是被除数为分数的时候,分子的幂次的贡献为正,分母为负

  1. #include<cstdio>
  2. #include<vector>
  3. #include<cstring>
  4. using namespace std;
  5. int vis[ + ];
  6.  
  7. int work_quality_factor(int n, int quality_fac[], int frequency[])
  8. {//n是待分解的数,quality_fac[]会存放它包含的质因子,而frequency[]存放对应次数
  9. //如q_f[k]=7,fre[k]=2就表示质因数分解后里面包含有7,且次数是2
  10. //函数返回有几种质因子,比如分解了25就返回1,分解28返回2
  11. int res, temp, i;
  12. res = ;
  13. temp = n;
  14. for (i = ; i*i <= temp; i++)
  15. if (temp%i == )
  16. {
  17. quality_fac[res] = i;
  18. frequency[res] = ;
  19. while (temp%i == )
  20. {
  21. temp = temp / i;
  22. frequency[res]++;
  23. }
  24. res++;
  25. }
  26. if (temp > )
  27. {
  28. quality_fac[res] = temp;
  29. frequency[res++] = ;
  30. }
  31. return res;
  32. }
  33.  
  34. int main() {
  35. int n, m;
  36. while (scanf("%d%d", &n, &m) != EOF) {
  37. n--;
  38. memset(vis, , sizeof(vis));
  39. int fac[], frq[];
  40. int primenum = work_quality_factor(m, fac, frq);
  41.  
  42. for (int i = ; i < primenum; i++) {
  43. int min_e = frq[i], x, e = ;
  44. // c(n,k)=c(n,k-1)*(n-k+1)/k
  45. for (int k = ; k < n; k++) {
  46. //分成上下两部分除,上面的幂次的贡献为正,下面为负
  47. x = n - k + ;
  48. while (x%fac[i]==) { x /= fac[i]; e++; }
  49. x = k;
  50. while (x%fac[i]==) { x /= fac[i]; e--; }
  51. if (e < min_e)vis[k] = ;
  52. }
  53. }
  54.  
  55. vector<int>ans;
  56. for (int i = ; i < n; i++)
  57. if (!vis[i])ans.push_back(i + );
  58. printf("%d\n", ans.size());
  59. if (!ans.empty()) {
  60. printf("%d", ans[]);
  61. for (int i = ; i < ans.size(); i++)
  62. printf(" %d", ans[i]);
  63. }
  64. printf("\n");
  65. }
  66. return ;
  67. }

Uva1635 二项式递推+质因子分解+整数因子分解的更多相关文章

  1. HDU-4651 Partition 整数拆分,递推

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4651 题意:求n的整数拆为Σ i 的个数. 一般的递归做法,或者生成函数做法肯定会超时的... 然后要 ...

  2. 大概是:整数划分||DP||母函数||递推

    整数划分问题 整数划分是一个经典的问题. Input 每组输入是两个整数n和k.(1 <= n <= 50, 1 <= k <= n) Output 对于每组输入,请输出六行. ...

  3. POJ 2506 Tiling(递推+大整数加法)

    http://poj.org/problem?id=2506 题意: 思路:递推.a[i]=a[i-1]+2*a[i-2]. 计算的时候是大整数加法.错了好久,忘记考虑1了...晕倒. #includ ...

  4. HDU acm1028 整数划分 递归问题(递推)

    我们用递归+记忆化的方法来解决普通整数划分问题:定义 f(n,m)为将整数n划分为一系列整数之和,其中加数 最大不超过m. 得到下面的递推关系式: 当n==1 || m==1 只有一种划分,即 1 或 ...

  5. 【BZOJ-2476】战场的数目 矩阵乘法 + 递推

    2476: 战场的数目 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 58  Solved: 38[Submit][Status][Discuss] D ...

  6. 【66测试20161115】【树】【DP_LIS】【SPFA】【同余最短路】【递推】【矩阵快速幂】

    还有3天,今天考试又崩了.状态还没有调整过来... 第一题:小L的二叉树 勤奋又善于思考的小L接触了信息学竞赛,开始的学习十分顺利.但是,小L对数据结构的掌握实在十分渣渣.所以,小L当时卡在了二叉树. ...

  7. 简单递推 HDU-2108

    要成为一个ACMer,就是要不断学习,不断刷题...最近写了一些递推,发现递推规律还是挺明显的,最简单的斐波那契函数(爬楼梯问题),这个大家应该都会,看一点稍微进阶了一点的,不是简单的v[i] = v ...

  8. openjudge1768 最大子矩阵[二维前缀和or递推|DP]

    总时间限制:  1000ms 内存限制:  65536kB 描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵. 比如,如下4 * 4的 ...

  9. 【BZOJ-4547】小奇的集合 矩阵乘法 + 递推

    4547: Hdu5171 小奇的集合 Time Limit: 2 Sec  Memory Limit: 256 MBSubmit: 175  Solved: 85[Submit][Status][D ...

随机推荐

  1. vb.net datagridview 使用方法

    目录:  1. 取得或者修改当前单元格的内容  2. 设定单元格只读  3. 不显示最下面的新行  4. 判断新增行  5. 行的用户删除操作的自定义  6. 行.列的隐藏和删除  7. 禁止列或者行 ...

  2. selenium 多表单切换

    frame/iframe表单嵌套页面的应用.WebDrivr只能在一个页面上对元素识别与定位,对于在frame/iframe表单内嵌页面上的元素无法直接定位.这时需要使用 switch_to.fram ...

  3. two measures precision and recall of classification

    In pattern recognition and information retrievial with binary classification , there are some measur ...

  4. MySQL性能优化---索引

    一.什么是索引 索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录.表里 ...

  5. Python3(六) 面向对象

    一.类的定义 1. class Student():     name = ' ' #定义变量     age = 0     def print_file(self):     #定义函数      ...

  6. 数据算法 --hadoop/spark数据处理技巧 --(7.共同好友 8. 使用MR实现推荐引擎)

    七,共同好友. 在所有用户对中找出“共同好友”. eg: a    b,c,d,g b    a,c,d,e map()->  <a,b>,<b,c,d,g> ;< ...

  7. tomcat solr服务无法搜索中文

    把tomcat的配置文件修改一下就好了, vi server.xml <Connector port="8080" protocol="HTTP/1.1" ...

  8. 用C语言实现中国象棋

    基于五子棋框架上的 象棋 小游戏 本游戏是上各种水课无聊时的产物...不参考现有游戏从零开始实现各项功能. 游戏配置:二维数组,循环系统,wasd基本移动,调整窗台的函数,以及富足的发呆时间.. 完整 ...

  9. Qps从300到1500的优化过程

    最近压测一项目,遇到的性能问题比较典型,过程记录下来,给大家做定位调优参考: 表象: 单接口负载测试,qps最高到300,响应时间200ms,应用cpu达到90%以上,8c机器,如下图,写到这里可能有 ...

  10. Android Studio安装虚拟机步骤

    1. 新建 或者 2. 按图中的步骤,选择一款设备,建议选择分辨率小的,不占内存 3. 按图 4. 按图 5. 点击finish后,选择之前下载的虚拟机,点next 6. 虚拟机重命名 7. 到这里, ...