C++数论容斥原理—————无关的元素

该博客探讨了如何使用C++解决一个与数论和杨辉三角相关的数学问题。通过理解题目描述,计算相邻两数之和并重复此过程,最后确定一个数除以给定数m的余数与哪些数无关。博客内容包括输入输出说明、示例、解题思路和代码实现,涉及质因数分解、二项式定理和Legendre定理。
摘要由CSDN通过智能技术生成

题目描述;

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

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

输入:

第1行:2个整数n和m(1<=n<=10^5, 2 <=m<=10^9)

输出;

按升序列出与m无关的元素的序号,每行1个。

若与全部元素无关,输出0

输入样例:

5 3

输出样例:

3

提示:

无。

思路分析:

此题的意思就是求杨辉三角上的第n行上的数,有哪些被m整除。

而想一想被m整除,那么m所有的因子,这个数就一定有。

所以我们就可以用质因数的唯一分解求出因子。

然后再枚举杨辉三角的数,当然在运用二项式定理与Legendre定理存储m的因子相同的个数。

最后再比较它们的大小,一旦m的该因子个数比此数大,就可以判定他不是无关的元素。

代码实现:


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值