uva1635
- /* 哑元 组合数的递推整除判断_________________________________________________________________________________
- #include <iostream>
- #include <map>
- #include <cmath>
- #include <vector>
- #include <cstdio>
- #include <string>
- #include <cstring>
- #include <algorithm>
- using namespace std;
- #define fir first
- #define sec second
- #define pb(x) push_back(x)
- #define mem(A, X) memset(A, X, sizeof A)
- #define REP(i,l,u) for(int (i)=(int)(l);(i)<=(int)(u);++(i))
- #define rep(i,l,u) for(int (i)=(int)(l);(i)>=(int)(u);--(i))
- #define foreach(e,x) for(__typeof(x.begin()) e=x.begin();e!=x.end();++e)
- typedef int LL;
- typedef unsigned long long ull;
- typedef pair<long,long> pll;
- LL T,n;
- const int mod=1e9+7;
- const int maxn=1e5+10;
- 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按照从小到大存储.
- {
- mf.clear(); fp.clear();
- if(mm==1) {mf.pb(1); fp[1]=1;}
- else
- {
- for(int i=2;i*i<=mm;i++)
- {
- if(mm%i==0)
- {
- mf.push_back(i);
- while(mm%i==0) //除干净某个因子.
- {
- mm/=i;
- fp[i]++;
- }
- }
- }
- if(mm!=1)
- {
- mf.push_back(mm); //如果m 是素数 放进去
- fp[mm]++;
- }
- }
- }
- int main()
- {
- freopen("in.txt","r",stdin);
- //while(cin>>n)
- int n,m;
- while(cin>>n>>m)
- {
- vector<int> ans;
- if(m==1)
- { REP(i,1,n) ans.pb(i);}
- else
- {
- //REP(kase,1,T) { }
- vector<int> dm;
- map<int ,int > pm;
- pre(m,dm,pm);
- vector<int> curd;
- map<int,int > curp;
- REP(i,1,(n+1)/2)
- {
- vector<int> td; map<int,int>tp;
- if(i==1) {td.pb(1);tp[1]=1;}
- else
- {
- pre(n-i+1,td,tp);
- vector<int> tempd; map<int,int> tempp;
- pre(i-1,tempd,tempp);
- REP(j,0,tempd.size()-1)
- {
- int key=tempd[j];
- tp[key]-=tempp[key];
- }
- }
- map<int,int> ::iterator it;
- for(it=tp.begin();it!=tp.end();it++)
- curp[it->fir]+=it->sec;
- int ok=1;
- for(it=pm.begin();it!=pm.end();it++)
- {
- //cout << "-----"<<it->first << endl;
- if(it->sec>curp[it->fir]){
- //cout<<"i:"<<i<<endl;
- ok=0;break;}//
- }
- if(ok)
- {
- //cout<<"i :"<<i<<endl;
- ans.pb(i);
- if(i!=n-i+1) ans.pb(n-i+1);
- }
- }
- sort(ans.begin(),ans.end());
- }
- cout<<ans.size()<<"\n";
- if(!ans.empty())
- {
- cout<<ans[0];
- REP(j,1,ans.size()-1) cout<<" "<<ans[j];
- }
- cout<<"\n";
- }
- return 0;
- }
- /*
- note : 组合数的大数字整除递推 C(n,k)=C(n,k-1)(n-k+1)/k,如果递推式没有除法可以直接进行余数的递推,但是这个里面的递推式中的分母是k,模是某个值m,
- 而k,m不一定互素,所以不一定可逆。但是极端的去想:如果给的m是一个素数的话可以利用这个性质推出2 到 k-1项。
- debug : pe了好几次 最后是当没有哑元的时候也要输出一个空行。
- optimize:
- */
uva1635的更多相关文章
- UVA-1635 数学
UVA-1635 题意: 给定n个数a1,a2,a3.....an,依次求出相邻的两个数的和,最后成为一个数,问这个数模m的值与那些最初的数无关 例:a1,a2,a3, m=2 => a1+a2 ...
- UVA1635 Irrelevant Elements —— 唯一分解定理 + 二项式定理
题目链接:https://vjudge.net/problem/UVA-1635 (紫书320) 题解: 1.根据二项式定理, 可得递推公式: C(n,k) = (n-k+1)/k * C(n, k- ...
- 【UVa1635】Irrelevant Elements - 唯一分解定理
题意 给你 \(n\) 个数,每次求出相邻两个数的和组成新数列.经过 \(n-1\) 次操作后,得到一个数.求这个数 \(mod \ m\) 与哪些项无关. 如:当 \(m=2 \ , \ n=2\) ...
- Irrelevant Elements, ACM/ICPC NEERC 2004, UVa1635
这种题目最重要的是思路了清晰 #include <cstdio> #include <cstring> ;//sqrt(n)+1 is enough ][]; ]; int a ...
- UVA1635 Irrelevant Elements(唯一分解定理 + 组合数递推)
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=51196 紫书P320; 题意:给定n个数a1,a2····an,依次求出相邻 ...
- 【组合数的唯一分解定理】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 ...
- UVa1635 - Irrelevant Elements
通过观察发现其规律符合杨辉三角 需要注意的是最后ai的系数是C(i-1,n-1) 那么,问题就可以变成判断C(0,n-1),C(1,n-1)....C(n-1,n-1)哪些是m的倍数 只需要计算出m的 ...
- 例10-6 uva1635(唯一分解定理)
题意:给定n个数a1,a2····an,依次求出相邻两个数值和,将得到一个新数列,重复上述操作,最后结果将变为一个数,问这个数除以m的余数与那些数无关? 思路:最后观察期规律符合杨辉三角,那么,问题就 ...
- Irrelevant Elements UVA-1635 (二项式定理)
vjudge链接 原题链接 乍一看似乎没什么思路,但是写几个简单的例子之后规律就变得很明显. 比如当 n=5 时,每一步计算后的结果如下: a1 a1+a2 a1+2a2+a3 a1+3a2+3a3+ ...
随机推荐
- STM32——CAN通讯实现
CAN通讯的实现步骤: 1.CAN初始化,其中包括:a.配置CAN时钟,配置IO: b.使能CAN中断向量: c.CAN硬件寄存器配置初始化: d.过滤器初始化: e.打开CAN中断. 2.CAN发送 ...
- Struts2中动态方法的调用
Struts2中动态方法调用就是为了解决一个action对应多个请求的处理,以免action太多. 主要有一下三种方法:指定method属性.感叹号方式和通配符方式.推荐使用第三种方式. 1.指定me ...
- R语言XML包的数据抓取
htmlParse 函数 htmlParse加抓HTML页面的函数. url1<-"http://www.caixin.com/"url<-htmlParse(url1 ...
- ACM 字符串 题目整理
AC自动机 UVa 11468 Substring AC自动机+概率DP. 注意要补全不存在的边. 为什么要补全不存在的边呢?补全以后可以直接找到状态的转移,即从所有子节点就可以实现所有状态转移. ...
- Permutation
(M) Permutations (M) Permutations II (M) Permutation Sequence (M) Palindrome Permutation II
- iOS保存cookie的方法
SURLRequest*request =[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com/ ...
- android layout_weight讲解
Layout_weight是线性布局,也就是LinearLayout里面用到的,下面通过实验来看这个Layout_weight的特性. 1.当控件的属性android:layout_width=&qu ...
- 写简单游戏,学编程语言-python篇:大鱼吃小鱼
很常见的游戏之一,实现原理并不复杂,并且参考了几个相关的代码.这边主要还是以学习编程语言和学习编程思路为重点记录一下吧.最近时间有点吃紧,只能匆忙记录一下.用pygame做的大鱼吃小鱼的游戏截图如下: ...
- meta头部标签意义作用!
1.<meta name="viewport" id="viewport" content="width=device-width, initi ...
- Drools环境搭建(转)
Eclipse3.5安装Drools5.2.0.Final插件 到Drools下载页面(现在是http://www.jboss.org/drools/downloads.html) -下载并解压Dro ...