(0 <= n <= 1050, 1 <= k <= 100).
公式:
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
static BigInteger n;
static BigInteger[][] a;
static BigInteger[] jc;
static int k;
static void init()
{
a = new BigInteger[k+1][k+1];
for(int i = 0; i <= k; i ++)
{
BigInteger ret = BigInteger.ONE;
for(int j = 1; j <= k; j ++)
{
ret = ret.multiply(BigInteger.valueOf(i + 1));
}
a[0][i] = ret;
}
for(int i = 1; i <= k; i ++)
{
for(int j = 0; j <= k-i; j++)
{
a[i][j] = a[i-1][j+1].subtract(a[i-1][j]);
}
}
}
static void solve()
{
init();
BigInteger t1 = BigInteger.ONE;
BigInteger t2 = BigInteger.ONE;
BigInteger ret = BigInteger.ZERO;
for(int i = 0; i <= k; i ++)
{
t1 = t1.multiply(n.subtract(BigInteger.valueOf(i)));
t2 = t2.multiply(BigInteger.valueOf(i+1));
ret = ret.add(t1.multiply(a[i][0]).divide(t2));
}
System.out.println(ret);
}
public static void main(String[] args)
{
Scanner cin = new Scanner(System.in);
jc = new BigInteger[111];
BigInteger t= BigInteger.ONE;
for(int i = 1; i <= 100; i ++)
{
t = t.multiply(BigInteger.valueOf(i));
}
while(cin.hasNext())
{
n = cin.nextBigInteger();
k = cin.nextInt();
solve();
}
}
}