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 无关的元素(唯一分解定理+二项式定理)的更多相关文章

  1. UVA.10791 Minimum Sum LCM (唯一分解定理)

    UVA.10791 Minimum Sum LCM (唯一分解定理) 题意分析 也是利用唯一分解定理,但是要注意,分解的时候要循环(sqrt(num+1))次,并要对最后的num结果进行判断. 代码总 ...

  2. UVA - 10375 Choose and divide[唯一分解定理]

    UVA - 10375 Choose and divide Choose and divide Time Limit: 1000MS   Memory Limit: 65536K Total Subm ...

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

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

  4. Uva 10375 选择与除法 唯一分解定理

    题目链接:https://vjudge.net/contest/156903#problem/E 题意:已知 求:C(p,q)/C(r,s) 其中p,q,r,s都是10^4,硬算是肯定超数据类型的. ...

  5. Irrelevant Elements UVA - 1635 二项式定理+组合数公式+素数筛+唯一分解定理

    /** 题目:Irrelevant Elements UVA - 1635 链接:https://vjudge.net/problem/UVA-1635 题意:給定n,m;題意抽象成(a+b)^(n- ...

  6. UVA 10375 Choose and divide【唯一分解定理】

    题意:求C(p,q)/C(r,s),4个数均小于10000,答案不大于10^8 思路:根据答案的范围猜测,不需要使用高精度.根据唯一分解定理,每一个数都可以分解成若干素数相乘.先求出10000以内的所 ...

  7. UVa 10791 Minimum Sum LCM【唯一分解定理】

    题意:给出n,求至少两个正整数,使得它们的最小公倍数为n,且这些整数的和最小 看的紫书--- 用唯一分解定理,n=(a1)^p1*(a2)^p2---*(ak)^pk,当每一个(ak)^pk作为一个单 ...

  8. 唯一分解定理(以Minimun Sum LCM UVa 10791为例)

    唯一分解定理是指任何正整数都可以分解为一些素数的幂之积,即任意正整数n=a1^p1*a2^p2*...*ai^pi:其中ai为任意素数,pi为任意整数. 题意是输入整数n,求至少2个整数,使得它们的最 ...

  9. Uva 10791 最小公倍数的最小和 唯一分解定理

    题目链接:https://vjudge.net/contest/156903#problem/C 题意:给一个数 n ,求至少 2个正整数,使得他们的最小公倍数为 n ,而且这些数之和最小. 分析: ...

随机推荐

  1. 日志系统实战 AOP静态注入

    http://www.cnblogs.com/mushroom/p/3932698.html http://www.cnblogs.com/mushroom/p/4124878.html http:/ ...

  2. c# 对数据库的操作

    1.首先需要引用 using System.Data.SqlClient; 2.创建连接 SqlConnection connection = new SqlConnection(); connect ...

  3. 微信小程序 --- page.js文件

    page.js文件是写当前 page.wxml 页面的 JS 脚本文件: 示例: //获取应用实例 const app = getApp() Page({ data: { navComOneOnOff ...

  4. 最小树形图(hdu4009)

    Transfer water Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others) T ...

  5. postgresql----LIKE和SIMILAR TO

    LIKE和SIMILAR TO都支持模糊查询,另外SIMILAR TO还支持正则表达式查询.模糊查询中有两个重要的符号:下划线'_'匹配任意单个字符,百分号'%'匹配任意多个字符,可以是0个,如果想匹 ...

  6. 沈阳网络赛J-Ka Chang【分块】【树状数组】【dfs序】

    Given a rooted tree ( the root is node 11 ) of NN nodes. Initially, each node has zero point. Then, ...

  7. pandas的DataFrame用法

    用来生成DataFrame数据 1.说明: class pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=F ...

  8. FW:stash install

    先下载破解安装包.http://pan.baidu.com/s/1mgumBbE 我的安装环境. 说明下,经过我的测试. 如果系统内存低于 512M, 就不要折腾了,非常卡. 推荐 2048M 内存. ...

  9. Grafana+Prometheus监控

    添加模板一定要看说明以及依赖 监控redis https://blog.52itstyle.com/archives/2049/ http://www.cnblogs.com/sfnz/p/65669 ...

  10. saltstack master minion 配置文件

    Master端的配置是修改/etc/salt下master配置文件.以下是Master端常用的配置. interface: 指定bind 的地址(默认为0.0.0.0) publish_port: 指 ...