求和_数学

求和

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));
	}
}
posted @ 2021-02-25 23:50  PushyTao  阅读(86)  评论(0编辑  收藏  举报