链接:

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4510

题意:

对于给定的n个数a1, a2,…, an,依次求出相邻两数之和,将得到一个新数列。重复上述操作,最后结果将变成一个数。
问这个数除以m的余数与哪些数无关?例如n=3,m=2时,第一次求和得到a1+a2,a2+a3,
再求和得到a1+2a2+a3,它除以2的余数和a2无关。1≤n≤1e5,2≤m≤1e9。

分析:

不难证明,在一般情况下,最后ai的系数是C(n-1,i-1)。这样,问题就变成了求C(n-1,0), C(n-1,1), ...,C(n-1,n-1)中
有哪些是m的倍数。理论上,利用C(n,k) = (n-k+1)/k * C(n,k-1)可以递推出所有C(n-1,i-1),但它们太大了,
虽然可以用高精度,但是运算会很慢。然而此问题中所关心的只是“哪些是m的倍数”,所以只需要依次计算m的
唯一分解式中各个素因子在C(n-1,i-1)中的指数即可完成判断。这些指数仍然可以用上式递推,并且不会涉及高精度。

代码:

 import java.io.*;
import java.util.*; public class Main {
static ArrayList<Integer> prime = new ArrayList<Integer>(); static void resolve(int m) {
int u = (int)Math.sqrt(m + 0.5);
for(int i = 2; i <= u; i++) {
if(m % i != 0) continue;
prime.add(i);
while(m % i == 0) m /= i;
}
if(m > 1) prime.add(m);
} public static void main(String args[]) {
Scanner cin = new Scanner(new BufferedInputStream(System.in)); while(cin.hasNext()) {
int n = cin.nextInt();
int m = cin.nextInt(); n--;
boolean bad[] = new boolean[n+5];
prime.clear();
resolve(m);
for(int t = 0; t < prime.size(); t++) { // 求C(n,0)~C(n,n)有哪些数是m的倍数
int p = prime.get(t), e = 0, x = m, min = 0; // C(n,i) = p^e
while(x % p == 0) { x /= p; min++; }
for(int k = 1; k < n; k++) { // C(n,k)=C(n,k-1)*(n-k+1)/k
x = n - k + 1;
while(x % p == 0) { x /= p; e++; }
x = k;
while(x % p == 0) { x /= p; e--; }
if(e < min) bad[k] = true;
}
} ArrayList<Integer> ans = new ArrayList<Integer>();
for(int i = 1; i < n; i++) if(!bad[i]) ans.add(i+1);
System.out.println(ans.size());
if(ans.size() > 0) {
System.out.print(ans.get(0));
for(int i = 1; i < ans.size(); i++)
System.out.print(" " + ans.get(i));
}
System.out.println();
}
cin.close();
}
}

UVa 1635 - Irrelevant Elements(二项式系数 + 唯一分解定理)的更多相关文章

  1. UVA 1635 Irrelevant Elements

    https://vjudge.net/problem/UVA-1635 题意:n个数,每相邻两个求和,最后变成1个数,问这个数除m的余数与第几个数无关 n个数使用次数分别为C(n-1,i) i∈[0, ...

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

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

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

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

  4. UVa 1635 - Irrelevant Elements-[分解质因数]

    Young cryptoanalyst Georgie is investigating different schemes of generating random integer numbers ...

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

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

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

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

  7. POJ2167Irrelevant Elements[唯一分解定理 组合数 杨辉三角]

    Irrelevant Elements Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 2407   Accepted: 59 ...

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

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

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

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

随机推荐

  1. sleep函数作用(转)

    表示当前线程暂时不参与cpu竞争,该函数会阻塞方法,一般在比较耗时的任务中执行了一段时间后会调用一下该方法避免当前任务一直霸占cpu,详情可以查看以下参考链接. 我们可能经常会用到 Thread.Sl ...

  2. Iterator和for...of循环

    Iterator和for...of循环 Iterator(遍历器)的概念 数据结构的默认Iterator接口 调用Iterator接口的场合 字符串的Iterator接口 Iterator接口与Gen ...

  3. WeUI logo专为微信设计的 UI 库 WeUI

    http://www.oschina.net/p/weui?fromerr=FnwHyWAb http://weui.github.io/weui/

  4. html中块元素的居中。及兼容性

    块在块中垂直居中(父元素postion:relative;   子元素position:absolute; top:50%; margin-top:负二分之一高度) 块在块中水平居中 (子元素marg ...

  5. easyui+nodejs+sqlserver增删改查实现

    用到的模块或者技术: Express: http://www.expressjs.com.cn/4x/api.html#express Easyui: http://www.jeasyui.com/d ...

  6. 三:SpringTransaction

    一:什么是事务: 事务逻辑上的一组操作,组成这组操作的各个逻辑单元,要么一起成功,要么一起失败. 二:事务特性(ACID): 原子性(Atomicity) :强调事务的不可分割. 一致性(Consis ...

  7. equals()重写

    ** 注意 ** 1.重写equals方法修饰符必须是public,因为是重写的Object的方法. 2.参数类型必须是Object. 3.重写equals方法后最好重写hashCode方法,否则两个 ...

  8. Error:All flavors must now belong to a named flavor dimension.

    环境 android studio 3.0 错误 Error:All flavors must now belong to a named flavor dimension. 解决 在build.gr ...

  9. Windows下RSA密钥生成工具openssl

    下载openssl.zip 1. 生成原始 RSA私钥文件 private_key.pem openssl genrsa -out private_key.pem 1024 2. 将原始 RSA私钥转 ...

  10. JBPM学习第6篇:通过Git导入项目

    1.登记到工作台 切换到目录: $SERVER_HOME/bin/ for Unix environment: ./standalone.shfor Windows environment: ./st ...