列表

详情


NC217428. 杨辉的行积

描述

溪染:叁秋,你知道杨辉三角形第行所有数的乘积对取模的值吗?
叁秋:。。。。。。我说不知道会怎么样?
于是叁秋找到了你
杨辉三角形:
第一行:1 第二行:1 1 第三行:1 2 1 第四行:1 3 3 1 ...以下省略...

输入描述

仅一行一个正整数

输出描述

仅一行一个非负整数表示杨辉三角形第行所有数的乘积对取模的值。

示例1

输入:

3

输出:

2

说明:

2 = 1 \times 2\times 1

示例2

输入:

4

输出:

9

说明:

9 = 1 \times 3\times 3 \times 1

示例3

输入:

15

输出:

17771355

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(g++ 7.5.0) 解法, 执行用时: 122ms, 内存消耗: 504K, 提交时间: 2023-03-15 00:01:06

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=1e9+7;
ll qmi(ll a,ll b){
    ll res=1;
    while(b){
        if(b&1)res=res*a%mod;
        a=a*a%mod;
        b>>=1;
    }
    return res;
}
void solve() {
	ll n;
	cin>>n;
	ll res=1,ans=1;
	for(int i=1;i<=n;i++){
		ans=ans*res%mod;
		res=res*(n-i)%mod*qmi(i,mod-2)%mod;
	}
	cout<<ans<<endl;
}
int main() {
	solve();
	return 0;
}

C++ 解法, 执行用时: 706ms, 内存消耗: 436K, 提交时间: 2021-08-11 20:39:41

#include<iostream>
using namespace std;
int mod=1e9+7;
long long q(long long a,long long n)
{
	long long ans=1;
	while(n)
	{
		if(n&1)
			ans=(a*ans)%mod;
		a=(a*a)%mod;
		n=n/2;
	}
	return ans%mod;
}
int main()
{
	int n;
	long long a=1,b=1;
	cin>>n;
	n--;
	for(int i=0;i<n-1;++i)
		a=(a*q(n-i,n-i-1)%mod)%mod;
	for(int i=n-2;i>=1;--i)
		b=(b*q(n-i,i)%mod)%mod;
	cout<<a*q(b,mod-2)%mod;
    return 0; 
}

上一题