11选5旋转矩阵全包1 5 7 11的逆元是

 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
近世代数答案
下载积分:1000
内容提示:近世代数答案
文档格式:DOC|
浏览次数:23|
上传日期: 18:01:41|
文档星级:
全文阅读已结束,如果下载本文需要使用
 1000 积分
下载此文档
该用户还上传了这些文档
近世代数答案
官方公共微信乘法逆元(7)
后面自己加了不少东西
求C(n,m)%mod的方法总结
1.当n,m都很小的时候可以利用杨辉三角直接求。
C(n,m)=C(n-1,m)+C(n-1,m-1);
2.利用乘法逆元。
乘法逆元:(a/b)%mod=a*(b^(mod-2)) mod为素数。
逆元可以利用扩展欧几里德或欧拉函数求得:
1).扩展欧几里德:b*x+p*y=1 有解,x就是所求
2).费马小定理:b^(p-1)=1(mod p),故b*b^(p-2)=1(mod p),所以x=b^(p-2)
1. n!/(m!*(n-m)! =x%p ,先对算出n!、m!、(n-m)!对p取模的余数,就转换为a/b=x%p;因为p为素数,所以等价于bx+py=a;然后用扩展的欧几里得定理算出 bx’+py’=1的解,x=x’*a,就得到了最终的x的值,即C(m,n)%p得值。
2.逆元 其实如果mod是素数 则b的逆元其实就是b^(mod-2)
也就是 (m!(n-m)!)的逆元为 (m!(n-m)!)p-2 ;
int inv(int a) {
return a == 1 ? 1 : (long long)(MOD - MOD / a) * inv(MOD % a) % MOD;
LL C(LL n,LL m)
if(m & 0)return 0;
if(n & m)return 0;
if(m & n-m) m = n-m;
LL up = 1, down = 1;
for(LL i = 0 ; i & i ++){
up = up * (n-i) % MOD;
down = down * (i+1) % MOD;
return up * inv(down) % MOD;
3.当n和m比较大,mod是素数且比较小的时候(10^5左右),通过Lucas定理计算
Lucas定理:A、B是非负整数,p是质数。A B写成p进制:A=a[n]a[n-1]…a[0],B=b[n]b[n-1]…b[0]。
则组合数C(A,B)与C(a[n],b[n])C(a[n-1],b[n-1])…*C(a[0],b[0]) mod p同余
即:Lucas(n,m,p)=C(n%p,m%p)*Lucas(n/p,m/p,p)
LL fact[maxn+5];
LL a[maxn+10];
LL inv[maxn+10];
void init(){
a[0] = a[1] = 1;
fact[0] = fact[1] = 1;
inv[1] = 1;
for(int i = 2; i &= 100005; i++)
fact[i] = fact[i-1] * i % mod;
inv[i] = (mod - mod/i)*inv[mod%i]%mod;
a[i] = a[i-1] * inv[i] % mod;
LL C(int n, int m){
return fact[n]*a[n-m]%mod*a[m]%mod;
对了 除了lucas 还有o1 预处理逆元的方法
操作比lucas简单。lucas 主要是用于 C n m.
n和m都很大的情况 只能用lucas变小
void init(){
fact[0] = 1;
for(int i = 1; i &= ++i)
fact[i] = fact[i-1]*i%mod;
inv[maxn]=quickM(fact[maxn],mod-2);
for(int i=maxn-1;i&=0;i--)
inv[i]=inv[i+1]*(i+1);
inv[i]%=mod;
LL C(int n, int m){
return ((fact[n]*inv[m])%mod*(inv[n-m]))%mod;
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:7163次
积分:1894
积分:1894
排名:第19263名
原创:184篇
转载:30篇
(24)(56)(40)(32)(24)(26)(5)状态压缩(12)
动态规划(128)
【题目链接】:
设f[i][j]表示前i个物品,每种属性的状态奇偶状态为j的最大价值;
这里用j的二进制对应每种属性的状态;
为1表示那种属性的物品个数为奇数否则为偶数
f[i][j] = max(f[i-1][j],f[i-1][j^zt[i]]+jz[i]);
zt[i]是第i个物品拥有的属性的状态,jz[i]是第i个物品的价值
最后输出f[n][(1&& m)-1]就好;
【Number Of WA】
【完整代码】
#include &bits/stdc++.h&
using namespace std;
#define lson l,m,rt&&1
#define rson m+1,r,rt&&1|1
#define LL long long
#define rep1(i,a,b) for (int i =i &=i++)
#define rep2(i,a,b) for (int i =i &=i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define ms(x,y) memset(x,y,sizeof x)
typedef pair&int,int&
typedef pair&LL,LL&
const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0);
const int N = 1100;
const int ZT = 1050;
int jz[N],zt[N],n,m,f[N][ZT];
int main()
ios::sync_with_stdio(false),cin.tie(0);
rep1(i,0,ZT-1) f[0][i] = -1;
while (T--)
cin && n &&
rep1(i,1,n)
cin && jz[i] &&
zt[i] = 0;
rep1(j,1,sl)
zt[i]|=(1&&(ng-1));
f[0][0] = 0;
rep1(i,1,n)
rep1(j,0,(1&&m)-1)
f[i][j] = -1;
if (f[i-1][j]!=-1) f[i][j] = f[i-1][j];
int pre = j^zt[i];
if (f[i-1][pre]!=-1)
f[i][j] = max(f[i][j],f[i-1][pre]+jz[i]);
cout && f[n][(1&&m)-1] &&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:126042次
积分:11775
积分:11775
排名:第1085名
原创:1101篇
评论:22条
(24)(150)(80)(77)(83)(156)(130)(106)(82)(60)(165)

我要回帖

更多关于 旋转矩阵 11选5中6保6 的文章

 

随机推荐