UVa 1635 无关的元素(唯一分解定理+二项式定理)
https://vjudge.net/problem/UVA-1635
题意:
给定n个数a1,a2,...an,依次求出相邻两数之和,将得到一个新数列。重复上述操作,最后结果将变成一个数。问这个数除以m的余数与哪些数无关?例如n=3,m=2时,第一次求和得到a1+a2,a2+a3,再求和得到a1+2a2+a3,它除以2的余数和a2无关。
思路:
如果有n个数,最后结果就是杨辉三角的第n-1行。这样算出每一项的系数是很容易的,但是n很大,系数到最后很大。所以直接C%m的话不行。
有个整除的条件:m中每个素因子在C中都存在并且C中的指数大于等于m的素因子的指数。
所以我们先将m分解素因子,依次计算各个素因子在C中的指数,这里还要用到递推式,每次从左到右计算C的时候,只需要考虑(n-k+1)/k,因为在上一次已经计算过了,它的素因子指数已经保存下来了。
1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstring> 5 using namespace std; 6 7 const int maxn=1e5+5; 8 9 int n,m; 10 int fac[105][2]; //f[][0]用来存储质因子,f[][1]存储对应质因子的个数 11 int c[105]; 12 int a[maxn]; 13 int num; //m分解质因子的个数 14 15 void factor() //分解质因子 16 { 17 for(int i=2;i*i<=m;i++) 18 { 19 if(m%i==0) 20 { 21 fac[++num][0]=i; 22 fac[num][1]=0; 23 do 24 { 25 fac[num][1]++; 26 m/=i; 27 }while(m%i==0); 28 } 29 } 30 if(m>1) 31 { 32 fac[++num][0]=m; 33 fac[num][1]=1; 34 } 35 } 36 37 bool check(int n,int i) 38 { 39 int x=n-i; //n-1-i+1 40 int y=i; 41 for(int i=1;i<=num;i++) 42 { 43 int p=fac[i][0]; 44 while(x%p==0) 45 { 46 x/=p; 47 c[i]++; 48 } 49 while(y%p==0) 50 { 51 y/=p; 52 c[i]--; 53 } 54 } 55 for(int i=1;i<=num;i++) 56 if(c[i]<fac[i][1]) 57 return false; 58 return true; 59 } 60 61 int main() 62 { 63 while(cin>>n>>m) 64 { 65 num=0; 66 int cnt=0; 67 factor(); 68 memset(c,0,sizeof(c)); 69 for(int i=1;i<n-1;i++) //第1项和最后一项都是1,直接跳过 70 { 71 if(check(n,i)) 72 a[cnt++]=i+1; 73 } 74 printf("%d\n",cnt); 75 for (int i = 0; i < cnt; i++) 76 printf("%s%d", i == 0 ? "" : " ", a[i]); 77 printf("\n"); 78 } 79 return 0; 80 }
转载于:https://www.cnblogs.com/zyb993963526/p/6679418.html
UVa 1635 无关的元素(唯一分解定理+二项式定理)相关推荐
- HDU6287 口算训练(唯一分解定理+二分)
口算训练 Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 512000/512000 K (Java/Others) Total Sub ...
- 唯一分解定理一篇就够了
如果与唯一定理一起应用需要用到素数筛,可以看这篇文章: 线性筛判断素数 唯一分解定理: 任何一个大于1的自然数 N,如果N不为质数,**那么N可以唯一分解成有限个质数的乘积: 这里P1<P2&l ...
- 欧几里得算法与唯一分解定理
整理的算法模板合集: ACM模板 目录 最大公约数与最大公倍数 唯一分解定理 快速分解质因子 最大公约数与最大公倍数 最多O(logn)O(logn)O(logn) int gcd(int a, in ...
- FZU 1075 分解素因子【数论/唯一分解定理/分解素因子裸模板】
[唯一分解定理]:https://www.cnblogs.com/mjtcn/p/6743624.html 假设x是一个正整数,它的值不超过65535(即1<x<=65535),请编写一个 ...
- 唯一分解定理(算术基本定理)详解——hdu5248和lightoj1341
算数分解定理(唯一分解定理): 定义: 任何一个大于1的自然数 N,如果N不为质数,那么N可以唯一分解成有限个质数的乘积 N=P1a1 P2a2P3a3-Pnan,这里P1<P2<P3-& ...
- Gym-101466K Random Numbers(线段树,数学,唯一分解定理)
给一棵树,树上每个节点有一个权值,有两个操作,RAND操作查询u的子树乘积是多少以及有多少因数,SEED操作把节点u乘上v n,q <= 1e5.数值小于等于1e9,最大的质因数不超过13 组队 ...
- LightOJ - 1236 (唯一分解定理)
题意:求有多少对数对(i,j)满足lcm(i,j) = n,1<=i<=j, 1<=n<=1e14. 分析:根据整数的唯一分解定理,n可以分解为(p1^e1)*(p2^e2)* ...
- 牛客 - 阶乘(唯一分解定理)
题目链接:点击查看 题目大意:给出一个 p ,求出最小的 n! 使得 p 可以整除 n! 题目分析:因为 p 高达 1e9 ,可以考虑sqrt(n)的算法,也就是唯一分解定理了,分解之后对于每个质因子 ...
- CodeForces - 222C Reducing Fractions(唯一分解定理)
题目链接:点击查看 题目大意:给出两个数组,数组a表示的是分子的因数,数组b表示的是分母的因数,求约分后的答案 题目分析:一看题目挺简单的,但是在输出的那里这个题目做了特定的要求,题目首先给出的是1e ...
最新文章
- 常见http状态码说明(转)
- 基于MATLAB的交流电动机调速系统仿真
- 使用SpringMVC 的MultipartFile文件上传时参数获取的一个坑
- ssd颗粒查看工具_SSD又降价了,但是使用前一定要做这几件事
- a.out的构成及运行时在内存区域的分配
- 64位操作系统 mysql_MySQL学习第三天 Windows 64位操作系统下验证MySQL
- Thrift RPC实战(七) 基于zookeeper和thrift的RPC服务发布订阅
- Deepracer 学了就能云驾驭赛车? Deepracer机器学习入门级干货分享!
- conime.exe 文件的秘密
- Go 基础(二)关键字和代码注释
- WINCE6.0下载地址
- Codeblocks修改字体
- 二进制SCA指纹提取黑科技:Go语言逆向技术
- Android手机按键【监听】
- 初试Cloudxns详解,智能解析如此简单
- 罗技MX Master3Master 2s
- 黑苹果安装教程,教您黑苹果怎么安装
- 攻坚利器 | KFS助我们力挽狂澜,9天内政务系统开发迁移容灾全搞定!
- OpenStack(Queens版)高集群-3.高可用配置(pacemakerhaproxy)
- Proxmox VE 超融合集群不停服务更换硬盘操作实录
热门文章
- 每周一书-《程序开发心理学(银年纪念版)》
- 快速通过软件设计师考试方法
- 串口循环缓存区 简单 免初始化 不用堆、指针、分段memcpy
- android+去掉飞行模式,在Android中关闭飞行模式
- Git for Windows安装和基本设置
- Nexus启动失败处理:The nexus service was launched, but failed to start.
- Spring mvc Interceptor 解决Session超时配置流程
- MESSAGE: [unixODBC][MySQL][ODBC 3.51 Driver]Can't connect to local MySQL server through socket '/tmp
- 中小企业上云多地域办公组网(SAG)解决方案
- mongodb服务安装及部署配置