求和_数学
求和
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));
}
}