求和
Description
Input
输入两个整数n,m。
Output
输出占两行,第一行一个整数X,第二行整数Y,表示S=X/Y,且X,Y 互质 。
Samples
Input Copy
1 2
Output
1
2
Hint
m>1,n>0;
50%的数据满足n≤50;
100%的数据满足n+m≤500。
Source
信息学模拟-2
可以看出数据范围并不是很大
但是如果是求阶乘的话,肯定是要用C++大数来模拟的
对式子进行通分可以得到:
然后用大数求就可以了
Java大法好(Python用不熟)
Main_Code()
import java.util.Scanner; import java.util.*; import java.lang.Class; import java.math.BigInteger; public class Main{ public static void main(String[] args) { int n,m; BigInteger a,b,fenzi,fenmu; fenzi = new BigInteger("0"); fenmu = new BigInteger("1"); Scanner cin = new Scanner(System.in); n = cin.nextInt(); m = cin.nextInt(); a = BigInteger.valueOf(n); b = BigInteger.valueOf(m); /** System.out.println(a); System.out.println(b);**/ for(int i=2;i<=n+m-1;i++) { BigInteger temp = BigInteger.valueOf(i); fenmu = fenmu.multiply(temp); } for(int i=m;i<=n+m-1;i++) { int lim = i - m; BigInteger temp; ///BigInteger zero = new BigInteger("0"); if(lim == 0) { lim = 1;/// 0! == 1 temp = BigInteger.valueOf(1); }else { temp = BigInteger.valueOf(lim); for(int j=1;j<lim;j++) { BigInteger tt = BigInteger.valueOf(j); temp = temp.multiply(tt); } } int pos = i; BigInteger t2 = BigInteger.valueOf(pos); for(int j=1;j<pos;j++) { BigInteger tj = BigInteger.valueOf(j); t2 = t2.multiply(tj); } BigInteger chu = fenmu.divide(t2); temp = temp.multiply(chu); fenzi = fenzi.add(temp); } BigInteger gcdd = fenzi.gcd(fenmu); System.out.println(fenzi.divide(gcdd)); System.out.println(fenmu.divide(gcdd)); } }