题目链接:https://vjudge.net/problem/UVA-1635

(紫书320)

题解:

1.根据二项式定理, 可得递推公式: C(n,k) = (n-k+1)/k * C(n, k-1)

2.某一项与余数(%m)无关, 即表明该项的的系数是m的倍数, 由于 1<=n<=1e5, 直接运算的话肯定溢出。

所以 :将数字进行分解质因数, 记录质因子以及其个数。由于题目只需判断某项的系数是否为m的倍数, 所以只需要考虑m所拥有的质因子。

3.fac[i]记录m的质因数, num_m[i]记录m的质因数fac[i]的个数, num_c[i]记录二项式系数(动态)的质因数fac[i]的个数。

4.对于所有的i, 如果num_c[i] >= num_m[i] 则表明此系数是m的倍数, 即此项与余数无关。

代码如下:

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <cstdlib>
  5. #include <string>
  6. #include <vector>
  7. #include <map>
  8. #include <set>
  9. #include <queue>
  10. #include <stack>
  11. #include <sstream>
  12. #include <algorithm>
  13. using namespace std;
  14. #define pb push_back
  15. #define mp make_pair
  16. #define ms(a, b) memset((a), (b), sizeof(a))
  17. #define eps 0.0000001
  18. typedef long long LL;
  19. const int INF = 2e9;
  20. const LL LNF = 9e18;
  21. const int mod = 1e9+;
  22. const int maxn = 1e5+;
  23.  
  24. int n, m, cnt;
  25. int fac[maxn], num_m[maxn], num_c[maxn];
  26. int ans[maxn], sum;
  27.  
  28. void init()
  29. {
  30. n = n - ; //题目从a[1]~a[n], 而二项式定理中, 从a[0]~a[n], 所以要与二项式定理中的n对应。
  31. ms(num_m, );
  32. ms(num_c, );
  33. cnt = ;
  34.  
  35. int tmp = m;
  36. for(int i = ; i*i<=tmp; i++)
  37. {
  38. if(tmp%i==)
  39. {
  40. fac[++cnt] = i;
  41. while(tmp%i==) tmp /= i, num_m[cnt]++;
  42. }
  43. }
  44. if(tmp>) fac[++cnt] = tmp, num_m[cnt]++;
  45. }
  46.  
  47. int test(int x)
  48. {
  49. int a = n-x+;
  50. int b = x;
  51.  
  52. for(int i = ; i<=cnt; i++)
  53. {
  54. while(a%fac[i]==) num_c[i]++, a /= fac[i];
  55. while(b%fac[i]==) num_c[i]--, b /= fac[i];
  56. }
  57.  
  58. for(int i = ; i<=cnt; i++)
  59. if(num_m[i]>num_c[i]) return ;
  60. return ;
  61. }
  62.  
  63. void solve()
  64. {
  65. sum = ;
  66. for(int i = ; i<=n-; i++) //二项式的第0项和第n项都为1, 不需要考虑
  67. if(test(i))
  68. ans[++sum] = i+; //二项式的第i项, 对应题目中的第i+1项
  69.  
  70. printf("%d\n", sum);
  71. for(int i = ; i<=sum; i++)
  72. printf("%s%d", i==?"":" ", ans[i]);
  73. putchar('\n');
  74. }
  75.  
  76. int main()
  77. {
  78. while(scanf("%d%d",&n, &m)!=EOF)
  79. {
  80. init();
  81. solve();
  82. }
  83. }

UVA1635 Irrelevant Elements —— 唯一分解定理 + 二项式定理的更多相关文章

  1. UVA1635 Irrelevant Elements(唯一分解定理 + 组合数递推)

    http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=51196 紫书P320; 题意:给定n个数a1,a2····an,依次求出相邻 ...

  2. 【UVa1635】Irrelevant Elements - 唯一分解定理

    题意 给你 \(n\) 个数,每次求出相邻两个数的和组成新数列.经过 \(n-1\) 次操作后,得到一个数.求这个数 \(mod \ m\) 与哪些项无关. 如:当 \(m=2 \ , \ n=2\) ...

  3. Irrelevant Elements UVA - 1635 二项式定理+组合数公式+素数筛+唯一分解定理

    /** 题目:Irrelevant Elements UVA - 1635 链接:https://vjudge.net/problem/UVA-1635 题意:給定n,m;題意抽象成(a+b)^(n- ...

  4. POJ2167Irrelevant Elements[唯一分解定理 组合数 杨辉三角]

    Irrelevant Elements Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 2407   Accepted: 59 ...

  5. UVa 1635 无关的元素(唯一分解定理+二项式定理)

    https://vjudge.net/problem/UVA-1635 题意: 给定n个数a1,a2,...an,依次求出相邻两数之和,将得到一个新数列.重复上述操作,最后结果将变成一个数.问这个数除 ...

  6. UVa1635 - Irrelevant Elements

    通过观察发现其规律符合杨辉三角 需要注意的是最后ai的系数是C(i-1,n-1) 那么,问题就可以变成判断C(0,n-1),C(1,n-1)....C(n-1,n-1)哪些是m的倍数 只需要计算出m的 ...

  7. Irrelevant Elements UVA-1635 (二项式定理)

    vjudge链接 原题链接 乍一看似乎没什么思路,但是写几个简单的例子之后规律就变得很明显. 比如当 n=5 时,每一步计算后的结果如下: a1 a1+a2 a1+2a2+a3 a1+3a2+3a3+ ...

  8. 【组合数的唯一分解定理】Uva1635

    给出n.m,求得最终求和数列an=C(n-1,0)*x1 + C(n-1,1)*x2+...+C(n-1,n-1)*xn; 若xi与m无关,则an除以m的余数与xi无关,即余数不含xi的项: 输入:n ...

  9. poj2773 —— 二分 + 容斥原理 + 唯一分解定理

    题目链接:http://poj.org/problem?id=2773 Happy 2006 Time Limit: 3000MS   Memory Limit: 65536K Total Submi ...

随机推荐

  1. 网络数据嗅探工具HexInject

    网络数据嗅探工具HexInject   网络数据嗅探是渗透测试工作的重要组成部分.通过嗅探,渗透人员可以了解足够多的内容.极端情况下,只要通过嗅探,就可以完成整个任务,如嗅探到支持网络登录的管理员帐号 ...

  2. Jquery实现的图标抖动效果

    原文:http://www.webdm.cn/webcode/75de64a9-3fb4-473d-bc2c-97a0a063be79.html <!DOCTYPE html PUBLIC &q ...

  3. iOS 改变Search Bar中Scope Button中文本的颜色和字体

    - (void)initSearchbar{ self.wineSearchBar.delegate = self; [self.wineSearchBar setScopeBarButtonTitl ...

  4. 如何突破Windows环境限制打开“命令提示符”

    如今,许多企业或组织都会通过使用受限的windows环境来减少系统表面的漏洞.系统加固的越好,那么也就意味着能被访问和使用到的功能就越少. 我最近遇到的情况是,一个已经加固的系统同时受到McAfee ...

  5. 理解MySql事务隔离机制、锁以及各种锁协议

    一直以来对数据库的事务隔离机制的理解总是停留在表面,其内容也是看一遍忘一边.这两天决定从原理上理解它,整理成自己的知识.查阅资料的过程中发现好多零碎的概念假设串起来足够写一本书,所以在这里给自己梳理一 ...

  6. hdu5296(2015多校1)--Annoying problem(lca+一个公式)

    Annoying problem Time Limit: 16000/8000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others ...

  7. restframework-总结

    1. 规范 - 版本控制 - 部署专用的域名(防止跨域攻击) - 因为restframework又称为面向资源的编程所以url名词需要用专业的名词去表示 - 请求方式method - url上可以传递 ...

  8. 在Fedora 23上安装多媒体解码器

    在Fedora 23上安装多媒体解码器 时间:2016-06-25来源:topspeedsnail.com 作者:斗大的熊猫   安装多媒体解码器允许你播放更多格式的音频和视频格式.大多数这些解码器都 ...

  9. Caused by:java.sql.SQLException:ORA-01008:并不是全部变量都已绑定

    1.错误描写叙述 Caused by:java.sql.SQLException:ORA-01008:并不是全部变量都已绑定 2.错误原因 3.解决的方法

  10. static 静态域 类域 静态方法 工厂方法 he use of the static keyword to create fields and methods that belong to the class, rather than to an instance of the class 非访问修饰符

    总结: 1.无论一个类实例化多少对象,它的静态变量只有一份拷贝: 静态域属于类,而非由类构造的实例化的对象,所有类的实例对象共享静态域. class Employee { private static ...