NC217428. 杨辉的行积
描述
第一行:1 第二行:1 1 第三行:1 2 1 第四行:1 3 3 1 ...以下省略...
输入描述
仅一行一个正整数。
输出描述
仅一行一个非负整数表示杨辉三角形第行所有数的乘积对取模的值。
示例1
输入:
3
输出:
2
说明:
示例2
输入:
4
输出:
9
说明:
示例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; }