1. /* 哑元 组合数的递推整除判断_________________________________________________________________________________
  2.  
  3. #include <iostream>
  4. #include <map>
  5. #include <cmath>
  6. #include <vector>
  7. #include <cstdio>
  8. #include <string>
  9. #include <cstring>
  10. #include <algorithm>
  11. using namespace std;
  12. #define fir first
  13. #define sec second
  14. #define pb(x) push_back(x)
  15. #define mem(A, X) memset(A, X, sizeof A)
  16. #define REP(i,l,u) for(int (i)=(int)(l);(i)<=(int)(u);++(i))
  17. #define rep(i,l,u) for(int (i)=(int)(l);(i)>=(int)(u);--(i))
  18. #define foreach(e,x) for(__typeof(x.begin()) e=x.begin();e!=x.end();++e)
  19. typedef int LL;
  20. typedef unsigned long long ull;
  21. typedef pair<long,long> pll;
  22.  
  23. LL T,n;
  24. const int mod=1e9+7;
  25. const int maxn=1e5+10;
  26.  
  27. void pre(LL mm,vector <LL> & mf,map<LL,LL> &fp)//prime_resolve ( mm>=1 )mf m_factor, fp factor_power put all the 素因子(即素数)2 ... of m to the factor,且在factor按照从小到大存储.
  28. {
  29. mf.clear(); fp.clear();
  30. if(mm==1) {mf.pb(1); fp[1]=1;}
  31. else
  32. {
  33. for(int i=2;i*i<=mm;i++)
  34. {
  35. if(mm%i==0)
  36. {
  37. mf.push_back(i);
  38. while(mm%i==0) //除干净某个因子.
  39. {
  40. mm/=i;
  41. fp[i]++;
  42. }
  43. }
  44. }
  45. if(mm!=1)
  46. {
  47. mf.push_back(mm); //如果m 是素数 放进去
  48. fp[mm]++;
  49. }
  50. }
  51. }
  52.  
  53. int main()
  54. {
  55. freopen("in.txt","r",stdin);
  56. //while(cin>>n)
  57. int n,m;
  58. while(cin>>n>>m)
  59. {
  60. vector<int> ans;
  61. if(m==1)
  62. { REP(i,1,n) ans.pb(i);}
  63. else
  64. {
  65. //REP(kase,1,T) { }
  66. vector<int> dm;
  67. map<int ,int > pm;
  68. pre(m,dm,pm);
  69.  
  70. vector<int> curd;
  71. map<int,int > curp;
  72. REP(i,1,(n+1)/2)
  73. {
  74. vector<int> td; map<int,int>tp;
  75.  
  76. if(i==1) {td.pb(1);tp[1]=1;}
  77. else
  78. {
  79.  
  80. pre(n-i+1,td,tp);
  81.  
  82. vector<int> tempd; map<int,int> tempp;
  83. pre(i-1,tempd,tempp);
  84. REP(j,0,tempd.size()-1)
  85. {
  86. int key=tempd[j];
  87. tp[key]-=tempp[key];
  88. }
  89.  
  90. }
  91.  
  92. map<int,int> ::iterator it;
  93. for(it=tp.begin();it!=tp.end();it++)
  94. curp[it->fir]+=it->sec;
  95. int ok=1;
  96.  
  97. for(it=pm.begin();it!=pm.end();it++)
  98. {
  99. //cout << "-----"<<it->first << endl;
  100. if(it->sec>curp[it->fir]){
  101. //cout<<"i:"<<i<<endl;
  102. ok=0;break;}//
  103. }
  104. if(ok)
  105. {
  106. //cout<<"i :"<<i<<endl;
  107. ans.pb(i);
  108. if(i!=n-i+1) ans.pb(n-i+1);
  109. }
  110. }
  111. sort(ans.begin(),ans.end());
  112. }
  113.  
  114. cout<<ans.size()<<"\n";
  115. if(!ans.empty())
  116. {
  117. cout<<ans[0];
  118. REP(j,1,ans.size()-1) cout<<" "<<ans[j];
  119.  
  120. }
  121. cout<<"\n";
  122. }
  123. return 0;
  124. }
  125.  
  126. /*
  127. note : 组合数的大数字整除递推 C(n,k)=C(n,k-1)(n-k+1)/k,如果递推式没有除法可以直接进行余数的递推,但是这个里面的递推式中的分母是k,模是某个值m,
  128. 而k,m不一定互素,所以不一定可逆。但是极端的去想:如果给的m是一个素数的话可以利用这个性质推出2 到 k-1项。
  129. debug : pe了好几次 最后是当没有哑元的时候也要输出一个空行。
  130. optimize:
  131. */

uva1635的更多相关文章

  1. UVA-1635 数学

    UVA-1635 题意: 给定n个数a1,a2,a3.....an,依次求出相邻的两个数的和,最后成为一个数,问这个数模m的值与那些最初的数无关 例:a1,a2,a3, m=2 => a1+a2 ...

  2. UVA1635 Irrelevant Elements —— 唯一分解定理 + 二项式定理

    题目链接:https://vjudge.net/problem/UVA-1635 (紫书320) 题解: 1.根据二项式定理, 可得递推公式: C(n,k) = (n-k+1)/k * C(n, k- ...

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

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

  4. Irrelevant Elements, ACM/ICPC NEERC 2004, UVa1635

    这种题目最重要的是思路了清晰 #include <cstdio> #include <cstring> ;//sqrt(n)+1 is enough ][]; ]; int a ...

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

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

  6. 【组合数的唯一分解定理】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 ...

  7. UVa1635 - Irrelevant Elements

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

  8. 例10-6 uva1635(唯一分解定理)

    题意:给定n个数a1,a2····an,依次求出相邻两个数值和,将得到一个新数列,重复上述操作,最后结果将变为一个数,问这个数除以m的余数与那些数无关? 思路:最后观察期规律符合杨辉三角,那么,问题就 ...

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

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

随机推荐

  1. STM32——CAN通讯实现

    CAN通讯的实现步骤: 1.CAN初始化,其中包括:a.配置CAN时钟,配置IO: b.使能CAN中断向量: c.CAN硬件寄存器配置初始化: d.过滤器初始化: e.打开CAN中断. 2.CAN发送 ...

  2. Struts2中动态方法的调用

    Struts2中动态方法调用就是为了解决一个action对应多个请求的处理,以免action太多. 主要有一下三种方法:指定method属性.感叹号方式和通配符方式.推荐使用第三种方式. 1.指定me ...

  3. R语言XML包的数据抓取

    htmlParse 函数 htmlParse加抓HTML页面的函数. url1<-"http://www.caixin.com/"url<-htmlParse(url1 ...

  4. ACM 字符串 题目整理

    AC自动机 UVa 11468  Substring AC自动机+概率DP. 注意要补全不存在的边. 为什么要补全不存在的边呢?补全以后可以直接找到状态的转移,即从所有子节点就可以实现所有状态转移. ...

  5. Permutation

    (M) Permutations (M) Permutations II (M) Permutation Sequence (M) Palindrome Permutation II

  6. iOS保存cookie的方法

    SURLRequest*request =[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com/ ...

  7. android layout_weight讲解

    Layout_weight是线性布局,也就是LinearLayout里面用到的,下面通过实验来看这个Layout_weight的特性. 1.当控件的属性android:layout_width=&qu ...

  8. 写简单游戏,学编程语言-python篇:大鱼吃小鱼

    很常见的游戏之一,实现原理并不复杂,并且参考了几个相关的代码.这边主要还是以学习编程语言和学习编程思路为重点记录一下吧.最近时间有点吃紧,只能匆忙记录一下.用pygame做的大鱼吃小鱼的游戏截图如下: ...

  9. meta头部标签意义作用!

    1.<meta name="viewport" id="viewport" content="width=device-width, initi ...

  10. Drools环境搭建(转)

    Eclipse3.5安装Drools5.2.0.Final插件 到Drools下载页面(现在是http://www.jboss.org/drools/downloads.html) -下载并解压Dro ...