hdu5446
来源:互联网 发布:黑马程序员java视频 编辑:程序博客网 时间:2024/06/06 17:54
import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.io.StreamTokenizer;import java.math.BigInteger;import java.text.DecimalFormat;import java.util.ArrayList;import java.util.Arrays;import java.util.Collection;import java.util.Collections;import java.util.Comparator;import java.util.HashMap;import java.util.HashSet;import java.util.Iterator;import java.util.LinkedList;import java.util.NavigableSet;import java.util.PriorityQueue;import java.util.Queue;import java.util.Scanner;import java.util.Set;import java.util.SortedSet;import java.util.Stack;import java.util.StringTokenizer;import java.util.TreeSet;public class Main { public static void main(String[] args) throws IOException{ StreamTokenizer cin = new StreamTokenizer(new BufferedInputStream(System.in)); InputReader in = new InputReader(System.in) ; PrintWriter out = new PrintWriter(System.out) ; int t = in.nextInt() ; while(t-- > 0){ new Task().solve(in, out) ; } out.flush(); }}class Task{ long[] extend_gcd(long a , long b){ if(b == 0){ long x = 1 ; long y = 0 ; return new long[]{a , x , y} ; } else{ long [] vic = extend_gcd(b , a%b) ; long y = vic[1] ; long x = vic[2] ; y -= x*(a/b) ; return new long[]{vic[0] , x , y} ; } } BigInteger CRT(long a[] , long m[] , int n){ long M = 1 ; for(int i = 0 ; i < n ; i++) M *= m[i] ; long ret = 0 ; BigInteger sum = BigInteger.ZERO ; for(int i = 0 ; i < n ; i++){ long tm = M/m[i] ; long[] vic = extend_gcd(tm , m[i]) ; long x = vic[1] ; ret = (ret + tm*x*a[i]) % M ; sum = sum.add(BigInteger.valueOf(tm).multiply(BigInteger.valueOf(x)).multiply(BigInteger.valueOf(a[i]))) ; sum = sum.mod(BigInteger.valueOf(M)) ; } return sum.add(BigInteger.valueOf(M)).mod(BigInteger.valueOf(M)) ; //return (ret%M + M)%M ; } static long[] fac = new long[100003]; void init(long p){ fac[0] = 1; for (int i=1; i<=p; i++) fac[i] = fac[i-1]*i%p; } long PowerMod(long a, long b, long k){ long tmp = a, ret = 1; while (b > 0) { if( (b & 1) > 0) ret = ret * tmp % k; tmp = tmp * tmp % k; b >>= 1; } return ret; } long Lucas(long n, long m, long p){ init(p) ; long ret = 1; while (n > 0 && m > 0){ long nn = n%p, mm = m%p; if (nn < mm) return 0; ret = ret*fac[(int)nn]*PowerMod(fac[(int)mm]*fac[(int)(nn-mm)]%p, p-2, p)%p; n /= p; m /= p; } return ret; } public void solve(InputReader in , PrintWriter out) throws IOException{ long n = in.nextLong() ; long m = in.nextLong() ; int k = in.nextInt() ; long[] pri = new long[k] ; long[] mod = new long[k] ; for(int i = 0 ; i < k ; i++){ pri[i] = in.nextLong() ; mod[i] = Lucas(n, m, pri[i]) ; } // long ans = CRT(mod, pri, k) ; out.println(CRT(mod, pri, k)); }}class InputReader{ public BufferedReader reader; public StringTokenizer tokenizer; public InputReader(InputStream stream){ reader = new BufferedReader(new InputStreamReader(stream), 32768) ; tokenizer = null ; } public String next(){ while(tokenizer == null || ! tokenizer.hasMoreTokens()){ try{ tokenizer = new StringTokenizer(reader.readLine()); }catch (IOException e) { throw new RuntimeException(e); } } return tokenizer.nextToken(); } public int nextInt(){ return Integer.parseInt(next()); } public long nextLong(){ return Long.parseLong(next()); } public double nextDouble(){ return Double.parseDouble(next()); }}
0 0
- hdu5446
- HDU5446
- hdu5446 lucas+crt
- HDU5446 Unknown Treasure
- hdu5446(数论)
- hdu5446 lucas+中国剩余定理
- hdu5446——Unknown Treasure
- hdu5446(2015长春网络赛J题)
- HDU5446 Unknown Treasure Lucas+中国剩余定理
- hdu5446 卢卡斯+中国剩余定理
- HDU5446 Unknown Treasure[中国剩余定理+Lucas]
- Lucas定理+中国剩余定理 hdu5446 Unknown Treasure
- HDU5446(2015年长春网络赛1010)改
- hdu5446 Unknown Treasure(Lucas+中国剩余定理)
- hdu5446(组合数取模 Lucas定理 中国剩余定理)
- hdu5446 Unknown Treasure(数论综合题:大组合数取大合数模:Lucas+CRT)
- Unknown Treasure ————(hdu5446) 中国剩余定理+卢卡斯定理
- 自定义MITK PlanarFigure及困惑
- 宏定义以及例子
- hdu2824 The Euler function
- [疑似官泄] 某Ri牌示波器固件破解
- Exbox上的相关链接
- hdu5446
- centos 7 防火墙和端口配置
- java虚拟机的面试问题
- Linux指令学习笔记(一)
- 乐观锁和悲观锁
- 用AXIS2发布法WebService的方法
- Dart基础学习03--方法的使用
- StateListDrawable(状态)资源属性
- NYOJ 91 阶乘之和 (贪心)