mod函数

【LeetCode】620. 有趣的电影

久未见 提交于 2020-05-01 09:34:07
某城市开了一家新的电影院,吸引了很多人过来看电影。该电影院特别注意用户体验,专门有个 LED显示板做电影推荐,上面公布着影评和相关电影描述。 作为该电影院的信息部主管,您需要编写一个 SQL查询,找出所有影片描述为 非 boring (不无聊) 的并且 id 为奇数 的影片,结果请按等级 rating 排列。 例如,下表 cinema : +---------+-----------+--------------+-----------+ | id | movie | description | rating | +---------+-----------+--------------+-----------+ | 1 | War | great 3D | 8.9 | | 2 | Science | fiction | 8.5 | | 3 | irish | boring | 6.2 | | 4 | Ice song | Fantacy | 8.6 | | 5 | House card| Interesting| 9.1 | +---------+-----------+--------------+-----------+ 对于上面的例子,则正确的输出是为: +---------+-----------+--------------+-----------+ | id |

#NOIP前数学知识总结

寵の児 提交于 2020-03-12 04:50:25
我好菜啊…… 欧拉函数 欧拉函数φ(n),是小于n且和n互质的正整数(包括1)的个数。 性质: 1.对于质数n: $φ(n)=n-1$ 2..对于n=p k $φ(n)=(p-1)*p^{k-1}$ 3.积性函数的性质: 对于互质的m,n,有: $φ(n*m)=φ(n)*φ(m)$ 4.欧拉函数的计算式: $φ(n)=n*\Pi (1-\frac{1}{p_i})$ 5.求小于n且与n互质的数的和: $S=n*φ(n)/2$ 欧拉定理 对于互质的a,m,有: $a^{\varphi (m)}\equiv 1(mod\ m)$ 可以看出费马小定理是欧拉定理的特殊情况。 欧拉定理可以用于指数取模,即$x^y\ \equiv x^{y\ mod\ \varphi (p)}\ (mod\ p)$,p为质数 欧几里得定理 $gcd(a,b)=gcd(b,a\ mod\ b)$ 扩展欧几里得 已知a,b,求解一组x,y,使他们满足$ax+by=gcd(a,b)$ 证明: ax+by=gcd(a,b); 1. (1) $a = 0$,$ax+by = gcd(a,b) = gcd(0,b) = b$, 此时$x = 0$(此时x的值是任意的),$y = 1$; (2)$b = 0$,$ax + by = gcd(a,b) = gcd(a,0) = a$, 此时$x = 1,y = 0$

Common Knowledge

自古美人都是妖i 提交于 2020-03-07 22:16:00
2014-08-23 11:01:11 -6:四面体 (1)内切球半径:r = 3V / (S1+S2+S3+S4) (2)体积:将四点组成三个向量AB,AC,AD,向量的混合积就是它们组成的平行六面体的体积,四面体体积是其体积的1/6。 -5:枚举一个集合(设为s)的所有 超集 ,总共N个物品。(ts为集间差) for(int f = s; f < (1 << N); f = (f + 1) | s){ int ts = s ^ f; } -4:枚举一个集合(设为s)的所有 非空子集 ,总共N个物品。(ts为集间差),注意空集需要另外讨论。 for (int f = s; f > 0; f = (f - 1) & s) { int ts = s ^ f; } -2:头文件便利贴(C++11) #include <bits/stdc++.h> using namespace std; #define getmid(l,r) ((l) + ((r) - (l)) / 2) #define MEM(a,b) memset(a,b,sizeof(a)) #define MP(a,b) make_pair(a,b) #define PB push_back typedef long long ll; typedef pair<int,int> pii; const double eps =

[LOJ6436][PKUSC2018]神仙的游戏

独自空忆成欢 提交于 2020-03-03 09:44:07
loj description 给你一个只有 01 和 ? 的字符串,问你是否存在一种把 ? 改成 01 的方案使串存在一个长度为 \(1-n\) 的 \(border\) 。 \(n\le5\times10^5\) sol 这种题都不会我还是太菜了。 有一档部分分是“ 01 的个数不超过 \(5000\) ”。这个其实对正解的提示是蛮大的。 有一个显然的结论:存在一个长度为 \(len\) 的 \(border\) 当且仅当对于 \(\forall i\in[1,len]\) 有 \(s[i]=s[n-len+i]\) 。(感谢热心网友找出这里的一个错误) 或者这样说,把所有位置在模 \(n-len\) 意义下分组,同一组里的 01 要全部相同。 那么,如果存在一组 0 和 1 他们的下标之差为 \(x\) ,那么所有 \(y|x\) 的 \(n-y\) 都不可能成为 \(border\) 。 这样 \(67\) 分就可以写一个 \(5000^2\) 枚举 01 对统计,然后每次扫一遍倍数 \(O(n\log n)\) 计算答案。 考虑正解。现在的复杂度瓶颈在于枚举 01 对。 搞两个生成函数 \(A(x)\) 和 \(B(x)\) , \(A(x)=\sum_{i=0}^{n-1}[s_i==0]x^i\) , \(B(x)=\sum_{i=0}^{n-1}[s_i==1]x

[bzoj4176] Lucas的数论

倾然丶 夕夏残阳落幕 提交于 2020-03-01 07:38:04
Description 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了。 在整理以前的试题时,发现了这样一道题目“求Sigma(f(i)),其中1<=i<=N”,其中 表示i的约数个数。他现在长大了,题目也变难了。 求如下表达式的值: \[ \sum_{i=1}^n\sum_{j=1}^nf(ij) \] 其中 表示ij的约数个数。 他发现答案有点大,只需要输出模1000000007的值。 Input 第一行一个整数n。 Output 一行一个整数ans,表示答案模1000000007的值。 Sample Input 2 Sample Output 8 HINT 对于100%的数据n <= 10^9。 solution 这题要求的东西其实和[ bzoj3994] [SDOI2015]约数个数和 是一样的,只是数据范围不同. 由于这题 \(n\) 到了 \(1e9\) ,考虑使用杜教筛. 对于 \(f(n)=\sum_{i=1}^{n}\lfloor\frac{n}{i}\rfloor\) ,可以数论分块大力算一下. 然后考虑 \(\sum_{i=1}^{n}\mu(i)\) 怎么算. 先把杜教筛的套路式搬出来: \[ S(n)=\sum_{i=1}^{n}(f*g)(i)-\sum_{i=2}^{n}g(i)S(\lfloor\frac{n}{i}

字符加密(cipher)

試著忘記壹切 提交于 2020-03-01 06:58:46
字符加密 Valentino 向往星空。。。某一天他脑洞大开地想要往太空中发送一串讯息,没准哪个外星文明接收到了呢?但是他突然想起一个问题,要是信息在传递过程中受到干扰,外星文明接收到错误的信息怎么办?如何校验信息的完整性?于是他找到了度娘:MD5 ( Message-Digest Algorithm ,信息-摘要算法 5)用于确保信息传输完整一致。它具有以下特点: 1、压缩性:任意长度的数据,算出的 MD5 值长度都是固定的。 2、容易计算:从原数据计算出 MD5 值很容易。 3、抗修改性:对原数据进行任何改动,哪怕只修改 1 个字节,所得到的 MD5 值都有很大区别。 4、弱抗碰撞:已知原数据和其 MD5 值,想找到一个具有相同 MD5 值的数据(即伪造数据)是非常困难的。 5、强抗碰撞:想找到两个不同的数据,使它们具有相同的 MD5 值,是非常困难的。 MD5 的作用是让大容量信息在用数字签名软件签署私人密钥前被“压缩”成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。 例如: MD5(“g123g123d”) = ac75129df6ce688096da043ea0974c02。 除了 MD5 以外,比较有名的还有 SHA1 。 安全哈希算法( Secure Hash Algorithm )主要适用于数字签名标准 (

数论模板总结 -- 持续更新

孤者浪人 提交于 2020-02-28 12:36:58
一些常用的简单数论模板以及书中的定理 组合数取模 1:N M < 1000, 杨辉三角双循环 ,边加边取模(代码未添加取模) 1 c[1][1] = c[1][0] = 1; 2 for(int i = 2; i <= 50; i++){ 3 c[i][0] = 1; 4 for(int j = 1; j <= i; j++){ 5 c[i][j] = (c[i - 1][j - 1] + c[i - 1][j]) % mod;6   } 7 } 2. C(n, k) = C(n, k - 1) * (n - k + 1) / k ,对2~maxn的逆元打表后,利用这个公式可以O(n)时间内求出C(n, k) 1 void getcom(int x){ 2 c[0] = c1[0] = 1; c[1] = x; c1[1] = n - x; 3 for(int i = 2; i <= x; i++) 4 // inv[i] 指i的逆元,可以使用扩展gcd打表 5 c[i] = c[i - 1] % mod * (x - i + 1) % mod * inv[i] % mod; 6 } GCD求最大公约数 1 //欧几里得算法,gcd() 2 int gcd(int a, int b){ 3 return b == 0 ? a: gcd(b, a%b); 4 } 扩展欧几里得算法

题解 nflsoj550 【六校联合训练 省选 #9】序列

大憨熊 提交于 2020-02-27 15:01:27
题目链接 以下把值域(题面里的 \(lim\) )记做 \(m\) 。 考虑求 \(k\) 的答案。考虑每个位置对答案的贡献,枚举位置 \(i\) ,再枚举 \(a[i]\) 的值 \(x\) 。设: \[ F(k)=\sum_{i=k+1}^{n}m^{i-k-1}m^{n-i}{i-1\choose k}\sum_{x=1}^{m}(x-1)^k \] 如果对着式子打一个 \(O(n^2m)\) 的暴力,就会发现这个 \(F(k)\) 并不是答案,它比答案大。它其实是 \(i\) 前面 至少 有 \(k\) 个数的方案数。而一个序列,如果 \(i\) 前面有超过 \(k\) 个 \(\leq x\) 的数,比方说有 \(j\) 个,那这个序列就会被计算 \(j\choose k\) 次。形式化地说,如果设 \(i\) 前面 恰好 有 \(k\) 个 \(\leq x\) 数的方案数为 \(G(k)\) ,则: \[ F(k)=\sum_{i=k}^{n}{i\choose k}G(i) \] 而这个 \(G(k)\) 的后缀和,就是我们要求的答案。 根据二项式反演,可知: \[ G(k)=\sum_{i=k}^{n}(-1)^{i-k}{i\choose k}F(i) \] 如果知道了 \(F[1\dots n]\) ,就可以用NTT快速求出 \(G[1\dots n]\)

杂题题解 Round2

心不动则不痛 提交于 2020-02-23 13:39:11
目录 [noiac#551] 矩阵 「SDWC2018 Day2」优秀 Number of M-Coprime Arrays [51nod1739] 小Q的集合 V2 [hdu6607] Easy Math Problem [WC2014]时空穿梭 [noiac#551] 矩阵 对于一个 \(n×m\) 的方格纸,求在每个位置填入 \(1∼k\) 的本质不同的方案数。 我们称两个方案是相同的,当且仅当我们可以通过若干次“交换两行”或“交换两列”的操作从一个方案得到另一个方案。 输出答案对 \(10^9+7\) 取模的结果, \(n,m\le45\) 。 考虑置换群,题目给出的行置换和列置换本质上就是允许重排行列,比较暴力的想法是对两维分别正整数拆分然后组合起来,然后发现较大的一维可以用 dp 做于是背包一下就做完了 code 「SDWC2018 Day2」优秀 先不考虑方案数的限制,考虑画一个折线图出来,可以从下到上按层转移,每两个 1 直接一定会在上一行插入 2 ,每两个 2 一定会在上一层插入 3 ,于是我们枚举当前上一层插入几个可以转移 现在考虑加上方案数的限制,由于方案数要求很小,于是我们直接设 \(f_{i,j,k,l}\) 表示搞完前 i 行,放了 j 个数,还有 k 个空隙,所有合法重排方案数为 l 的数列个数来转移即可 code Number of M

2020牛客寒假算法基础集训营2 求函数

孤人 提交于 2020-02-18 22:31:13
https://ac.nowcoder.com/acm/contest/3003/J 题意   有 n 个一次函数,第 i 个函数为 f i ​ ( x ) = k i ​ × x + b i ​ 。   有 m 次操作,每次操作为以下二者其一:   • 1 i k b f i ​ ( x ) 修改为 f i ​ ( x ) = k × x + b。   • 2 l r 求 f r ​ ( f r − 1 ​ ( ⋯ ( f l + 1 ​ ( f l ​ ( 1 ) ) ) ⋯ ) )。   答案对 10^9+7 取模。 题解 代码 #include<bits/stdc++.h> using namespace std; const int N=210000, mod=1e9+7; struct node { int first,second; }; int n,m,L_tree[N<<2],R_tree[N<<2],k[N]; node ans; void modify(int des,int k,int b,int L,int R,int root); void query(int l,int r,int L,int R,int root); int main() { int a,i,b,op; scanf("%d%d",&n,&m); for(i=1;i<=n;i++)