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,因为在上一次已经计算过了,它的素因子指数已经保存下来了。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std; const int maxn=1e5+; int n,m;
int fac[][]; //f[][0]用来存储质因子,f[][1]存储对应质因子的个数
int c[];
int a[maxn];
int num; //m分解质因子的个数 void factor() //分解质因子
{
for(int i=;i*i<=m;i++)
{
if(m%i==)
{
fac[++num][]=i;
fac[num][]=;
do
{
fac[num][]++;
m/=i;
}while(m%i==);
}
}
if(m>)
{
fac[++num][]=m;
fac[num][]=;
}
} bool check(int n,int i)
{
int x=n-i; //n-1-i+1
int y=i;
for(int i=;i<=num;i++)
{
int p=fac[i][];
while(x%p==)
{
x/=p;
c[i]++;
}
while(y%p==)
{
y/=p;
c[i]--;
}
}
for(int i=;i<=num;i++)
if(c[i]<fac[i][])
return false;
return true;
} int main()
{
while(cin>>n>>m)
{
num=;
int cnt=;
factor();
memset(c,,sizeof(c));
for(int i=;i<n-;i++) //第1项和最后一项都是1,直接跳过
{
if(check(n,i))
a[cnt++]=i+;
}
printf("%d\n",cnt);
for (int i = ; i < cnt; i++)
printf("%s%d", i == ? "" : " ", a[i]);
printf("\n");
}
return ;
}
UVa 1635 无关的元素(唯一分解定理+二项式定理)的更多相关文章
- UVA.10791 Minimum Sum LCM (唯一分解定理)
UVA.10791 Minimum Sum LCM (唯一分解定理) 题意分析 也是利用唯一分解定理,但是要注意,分解的时候要循环(sqrt(num+1))次,并要对最后的num结果进行判断. 代码总 ...
- UVA - 10375 Choose and divide[唯一分解定理]
UVA - 10375 Choose and divide Choose and divide Time Limit: 1000MS Memory Limit: 65536K Total Subm ...
- UVA1635 Irrelevant Elements —— 唯一分解定理 + 二项式定理
题目链接:https://vjudge.net/problem/UVA-1635 (紫书320) 题解: 1.根据二项式定理, 可得递推公式: C(n,k) = (n-k+1)/k * C(n, k- ...
- Uva 10375 选择与除法 唯一分解定理
题目链接:https://vjudge.net/contest/156903#problem/E 题意:已知 求:C(p,q)/C(r,s) 其中p,q,r,s都是10^4,硬算是肯定超数据类型的. ...
- Irrelevant Elements UVA - 1635 二项式定理+组合数公式+素数筛+唯一分解定理
/** 题目:Irrelevant Elements UVA - 1635 链接:https://vjudge.net/problem/UVA-1635 题意:給定n,m;題意抽象成(a+b)^(n- ...
- UVA 10375 Choose and divide【唯一分解定理】
题意:求C(p,q)/C(r,s),4个数均小于10000,答案不大于10^8 思路:根据答案的范围猜测,不需要使用高精度.根据唯一分解定理,每一个数都可以分解成若干素数相乘.先求出10000以内的所 ...
- UVa 10791 Minimum Sum LCM【唯一分解定理】
题意:给出n,求至少两个正整数,使得它们的最小公倍数为n,且这些整数的和最小 看的紫书--- 用唯一分解定理,n=(a1)^p1*(a2)^p2---*(ak)^pk,当每一个(ak)^pk作为一个单 ...
- 唯一分解定理(以Minimun Sum LCM UVa 10791为例)
唯一分解定理是指任何正整数都可以分解为一些素数的幂之积,即任意正整数n=a1^p1*a2^p2*...*ai^pi:其中ai为任意素数,pi为任意整数. 题意是输入整数n,求至少2个整数,使得它们的最 ...
- Uva 10791 最小公倍数的最小和 唯一分解定理
题目链接:https://vjudge.net/contest/156903#problem/C 题意:给一个数 n ,求至少 2个正整数,使得他们的最小公倍数为 n ,而且这些数之和最小. 分析: ...
随机推荐
- 360全景图three.js与Photo-Sphere-Viewer-master 3D全景浏览开发
1.支持WebGL和canvas的浏览器 (IE10, IE11支持, 但在IE里移动图片时很卡, 不一定是全部人都有这情况) 2.Three.js (文件较大, 有官网demo, 可不下载, 下载p ...
- ios 更改全局UINavigationBar的背景图片以及通知栏颜色
1.更改UINavigationController push 到另一个界面返回按钮的title self.navigationController.navigationBar.topItem.bac ...
- WCF(一) 创建第一个WCF
定义服务契约-创建宿主程序-创建客户端程序访问服务 namespace HelloService { /// <summary> /// 服务契约 /// </summary> ...
- js 格式验证大全
1.身份证号码验证: var Common = { //身份证号验证 IsIdCardNo: function (IdCard) { var reg = /^\d{15}(\d{2}[0-9X])?$ ...
- 牛客网多校赛第七场J--Sudoku Subrectangle
链接:https://www.nowcoder.com/acm/contest/145/J 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言6553 ...
- With all Java versions it is strongly recommended to not use experimental -XX JVM options.
https://lucene.apache.org/solr/7_6_0//SYSTEM_REQUIREMENTS.html System Requirements Apache Solr runs ...
- Python开发【Tornado】:简介与使用
Tornado框架 简介: Tornado是使用Python编写的一个强大的.可扩展的Web服务器.它在处理严峻的网络流量时表现得足够强健,但却在创建和编写时有着足够的轻量级,并能够被用在大量的应用和 ...
- 【PHP】善用php-fpm的慢执行日志slow log,分析php性能问题
(转)善用php-fpm的慢执行日志slow log,分析php性能问题 众所周知,mysql有slow query log,根据慢查询日志,我们可以知道那些sql语句有性能问题.作为mysql的好 ...
- Openstack(十七)部署快存储cinder
官方部署文档:https://docs.openstack.org/ocata/zh_CN/install-guide-rdo/cinder.html OpenStack的存储组件—Cinder和Sw ...
- POJ2506:Tiling(递推+大数斐波那契)
http://poj.org/problem?id=2506 #include <iostream> #include <stdio.h> #include <strin ...