全部评论
在整数取模的世界里,没有倒数,除以一个数,就等于在模意义下乘以这个数的逆元。可以类比实数的倒数
//硬币(除法运算用逆元代替) //2 1 0 #include <iostream> #include <algorithm> #include <functional> using namespace std; const int mod = 1e9 + 7; long long power(int x, int y, const int mod) { int t = 1; for (x %= mod; y > 0; x = (long long)x * x % mod, y /= 2) { if (y % 2 != 0) { t = (long long)t * x % mod; } } return t; } int Cmn(int m, int n, const int mod) { int t = 1; for (int i = 0; i < m; ++i) { t = ((t * (n - i) % mod) * power((i + 1), mod - 2, mod)) % mod; } //t = t * (n - i) / (i + 1); return t; } int main(void) { int n, p, q; cin >> n >> p >> q; //double e = pow(0.5, n); int u = 0, v = 0; for (; p + q <= n; ++p) { u = (u + p * Cmn(p, n, mod) % mod) % mod; //u += p * Cmn(p, n) * e; v = (v + Cmn(p, n, mod) % mod) % mod; //v += Cmn(p, n) * e; } cout << (float)u / v << endl; cout << (u * power(v, mod - 2, mod)) % mod << endl; getchar(); getchar(); return 0; } 和楼上的方法一样,用逆元代替除法运算,费马小定理
n = 2 p = 1 q = 0 mod = 1000000007 jie = [] ni = [] def power(a,n,mod): p = 1 while n>0: if n%2==1: p = p*a p = p%mod n = n//2 a = a*a%mod return p%mod def C(n,k): return jie[n]*ni[k]%mod*ni[n-k]%mod jie.append(1) ni.append(1) for i in range(1,10): sg = jie[i-1]*i%mod jie.append(sg) nio = power(sg, mod-2, mod) ni.append(nio) sum =0 for i in range(p,n-q+1): sum = (sum + C(n,i)*(i%mod)%mod)%mod #print(sum) mu = 0 for i in range(p,n-q+1): mu = (mu + C(n,i))%mod #print(mu) ans = sum * power(mu, mod-2, mod)%mod print(ans)
咋取模啊,本来以为自己做出来了结果不会取模
取模30%超时
求逆元,网上找个模板套一下
请问概率怎么算啊
概率算出来,发现不会取模,真坑啊
有路过大佬的希望解答一下
百分之30路过,不会取模
看不懂 用分子逐次加mod除分母 只能过20 后面应该是溢出导致死循环了
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 评论 收藏
分享