hjmmm的数论专题一日游

又是毕业季II

从n个数里面选k个数,求最大gcd
n ≤ 1 e 4 , i n f ≤ 1 e 6 n \le 1e4, inf \le 1e6 n1e4,inf1e6

题意 = 是 至少k个数 的因数的数的最大值
那么 O ( n ∗ i n f ) O(n * \sqrt {inf} ) O(ninf )处理一下所有数的因数 记录每个因数出现了多少次
然后 O ( i n f ) O(inf) O(inf)处理一下f(k) 即出现k次的因数的最大值
最后 O ( k ) O(k) O(k)转移 f(k) = max(f(k), f(k + 1))即可

阶乘问题

计算 N ( 1 ≤ N ≤ 50 , 000 , 000 ) N(1 \le N \le 50,000,000) N(1N50,000,000)阶乘的最右边的非零位的值
hint: 10 , 000 , 000 ! 10,000,000! 10,000,000! 2499999 2499999 2499999 个零

参考karma题解
一眼暴力可解 但注意如果每次 mod 10,会造成误差.因为当相乘后得到的是10的倍数时,mod 10 会变成0.
所以有三种方法

  • 暴力 暴力乘,每次保留得到的数的后7位左右(保证不出现误差)
  • 分析10怎么出现.发现如果两个数的因数中分别有2,5.那么相乘末尾一定有0.于是统计1~N中每个数的因数中2和5的个数.用2的个数减去5的个数(2的个数一定比5的个数多).剩下的是会对答案(即末尾的数)造成影响.之后大胆mod 10 就行了.
  • N!的末尾只会是2,4,6,8(在此题中没有0).又[2,4,6,8]中任意一个数乘6,末尾仍是本身.2 * 6 = 12,末尾为2, 4 * 6 =24,末尾为4, 6 * 6=36,末尾为6,8 * 6 =48,末尾为8.又末尾数字只受末尾数字影响,如4. 4 * 6得到的末尾数字与4 * 16的末尾数字一样.又4 * 10=40,末尾数字为4(此题不要末尾0).则4 * 2 *8==4 * 2 *5(意思是得到的末尾数字是一样的).故所有乘5的时候都可以换为乘8.又多次乘8末尾是有规律的.找出规律即可.(我太菜了没看懂

计算系数

给定一个多项式 ( b y + a x ) k (by+ax)^k (by+ax)k ,请求出多项式展开后 x n × y m x^n \times y^m xn×ym 项的系数。

( a x + b y ) k = ∑ p = 0 k C k p ( a x ) p ( b y ) k − p = ∑ p = 0 k ( C k p a p b k − p ) x p y k − p (ax+by)^k=\sum_{p=0}^kC_{k}^p(ax)^p(by)^{k-p}=\sum_{p=0}^k(C_{k}^pa^pb^{k-p})x^py^{k-p} (ax+by)k=p=0kCkp(ax)p(by)kp=p=0k(Ckpapbkp)xpykp

斐波那契公约数

Fibonacci数列第n项和第m项的最大公约数
n , m ≤ 1 0 9 n,m \le 10^9 n,m109

g c d ( F [ n ] , F [ n + 1 ] ) = 1 gcd(F[n],F[n+1])=1 gcd(F[n],F[n+1])=1
推出结论: g c d ( F [ n ] , F [ m ] ) = F [ g c d ( n , m ) ] gcd(F[n],F[m])=F[gcd(n,m)] gcd(F[n],F[m])=F[gcd(n,m)]

花园

求有多少个长度为n的由P,C组成环, 满足环上任意m个相邻的字符,不超过K个是C
N ≤ 1 0 15 , 2 ≤ M ≤ 5 , M ≤ N , a n s m o d    1000000007 N \le10^{15}, 2 \le M \le 5, M \le N, ans \mod 1000000007 N1015,2M5,MN,ansmod1000000007

感觉可以用容斥做?【雾】
floyd矩阵快速幂
P = 1, C = 0 处理出长度为m的所有情况
再处理出转移(类似于最短路floyd那个转移
v = (u >> 1) & (1 << (m - 1)) 或 (u >> 1) 再判一下满不满足条件
然后快速幂n次 变成自己的就是符合条件的

[SCOI2010]生成字符串

求由多少个由n个1和m个0组成的字符串满足在任意的前k个字符中,1的个数不能少于0的个数。
1 ≤ m ≤ n ≤ 1000000 , a n s m o d &ThinSpace;&ThinSpace; 20100403 1 \le m \le n \le 1000000, ans \mod 20100403 1mn1000000,ansmod20100403

结论: C ( n + m , m ) − C ( n + m , m − 1 ) C(n+m,m)−C(n+m,m−1) C(n+m,m)C(n+m,m1)
xyz32768的题解

[JLOI2013]卡牌游戏

第一回合是玩家1作为庄家。
每个回合过程如下:

  • 庄家随机从卡牌堆里选择一张卡片,卡片上的数字为X
  • 顺时针从庄家位置数第X个人将被处决即退出游戏
  • 卡片将会被放回卡牌堆里并重新洗牌
  • 被处决的人按顺时针的下一个人将会作为下一轮的庄家
    已知有n个玩家,m张牌和它们的内容
    求每个玩家胜出的概率。
    1 ≤ N ≤ 50 , 1 ≤ M ≤ 50 , 1 ≤ 每 张 卡 片 上 的 数 字 ≤ 50 1 \le N \le 50, 1 \le M \le 50, 1 \le 每张卡片上的数字 \le 50 1N501M50,150

概率dp
hint:概率dp好多都是逆推。。
直接dfs枚举的复杂度 对于每一轮枚举卡片种类 O ( m n ) O(m^n) O(mn)
第一感觉矩阵快速幂 然鹅奇妙的奇数方式并不能直接乘
f[i][j]表示在还剩下i个人时,从庄家开始数第j个人的获胜的概率
显然f[1][1] = 1(最后一轮了嘛
那么f[i]可以从f[i - 1]推出来
枚举剩了i个人那轮 抽到的牌是多少 就能推出那轮的庄家和挂掉的人
累加就好啦

转移式转自钟梓俊的题解

当c>j时, f [ i ] [ j ] = f [ i ] [ j ] + f [ i − 1 ] [ i − c + j ] m f[i][j]=f[i][j]+\frac{f[i-1][i-c+j]}{m} f[i][j]=f[i][j]+mf[i1][ic+j]
否则 当c<j时, f [ i ] [ j ] = f [ i ] [ j ] + f [ i − 1 ] [ j − c ] m f[i][j]=f[i][j]+\frac{f[i-1][j-c]}{m} f[i][j]=f[i][j]+mf[i1][jc]

[SDOI2009]虔诚的墓主人

不是树的地方都是墓哦
a n s m o d &ThinSpace;&ThinSpace; 2 , 147 , 483 , 648 ans \mod 2,147,483,648 ansmod2,147,483,648
1 ≤ N , M ≤ 1 , 000 , 000 , 000 , 0 ≤ x i ≤ N , 0 ≤ y i ≤ M , 1 ≤ N, M ≤ 1,000,000,000,0 ≤ xi ≤ N,0 ≤ yi ≤ M, 1N,M1,000,000,0000xiN0yiM
1 ≤ W ≤ 100 , 000 , 1 ≤ k ≤ 10 1 ≤ W ≤ 100,000,1 ≤ k ≤ 10 1W100,0001k10

注意一下用树状数组是因为它常数小
它直接维护列上的答案贡献
Lance1ot的博客

[CQOI2007]余数求和

给出正整数 n 和 k 计算 G ( n , k ) = k   &VeryThinSpace; m o d &VeryThinSpace;   1 + k   &VeryThinSpace; m o d &VeryThinSpace;   2 + k   &VeryThinSpace; m o d &VeryThinSpace;   3 + ⋯ + k   &VeryThinSpace; m o d &VeryThinSpace;   n G(n, k)=k\ \bmod\ 1 + k\ \bmod\ 2 + k\ \bmod\ 3 + \cdots + k\ \bmod\ n G(n,k)=k mod 1+k mod 2+k mod 3++k mod n的值
n , k ≤ 1 0 9 n,k≤10^9 n,k109

k   &VeryThinSpace; m o d &VeryThinSpace;   i = k − ⌊ k i ⌋ ∗ i k \ \bmod\ i = k - \lfloor \frac{k}{i} \rfloor * i k mod i=kiki
那么原式就是 k ∗ n − Σ i = 1 n ⌊ k i ⌋ ∗ i k * n - \Sigma_{i = 1}^{n}{\lfloor \frac{k}{i} \rfloor * i} knΣi=1niki
O ( l n   n ) O(ln \ n) O(ln n)暴力一下就好啦
每次求出一个除n下取整一样的区间 等差数列求和

[SCOI2005]扫雷

递推就可以了。。【想打人

2k进制数

高精 x 递推
f[i][j]第i位是j
f [ i ] [ j ] = Σ k = j + 1 2 k − 1 f [ i − 1 ] [ k ] f[i][j] = \Sigma_{k = j + 1}^{2^k - 1} f[i - 1][k] f[i][j]=Σk=j+12k1f[i1][k]

[POI2007]ZAP-Queries

其实还是逃不开这个式子
Σ i = 1 n Σ j = 1 m [ g c d ( i , j ) = d ] \Sigma_{i = 1}^{n} \Sigma_{j = 1}^{m} [gcd(i, j) = d] Σi=1nΣj=1m[gcd(i,j)=d]
= Σ i = 1 ⌊ n d ⌋ Σ j = 1 ⌊ m d ⌋ [ g c d ( i , j ) = 1 ] = \Sigma_{i = 1}^{\lfloor \frac{n}{d} \rfloor} \Sigma_{j = 1}^{\lfloor \frac{m}{d} \rfloor} [gcd(i, j) = 1] =Σi=1dnΣj=1dm[gcd(i,j)=1]
= Σ i = 1 ⌊ n d ⌋ Σ j = 1 ⌊ m d ⌋ Σ k ∣ d   μ ( k ) = \Sigma_{i = 1}^{\lfloor \frac{n}{d} \rfloor} \Sigma_{j = 1}^{\lfloor \frac{m}{d} \rfloor} \Sigma_{k | d} \ \mu (k) =Σi=1dnΣj=1dmΣkd μ(k)
= Σ k = 1 ⌊ m i n ( n , m ) d ⌋   μ ( k ) ⌊ n d k ⌋ ⌊ m d k ⌋ = \Sigma_{k = 1}^{\lfloor \frac{min(n, m)}{d} \rfloor} \ \mu (k) \lfloor \frac{n}{dk} \rfloor\lfloor \frac{m}{dk} \rfloor =Σk=1dmin(n,m) μ(k)dkndkm
然后貌似就没有什么问题了

[HAOI2011]Problem b

这不就是上一道题容斥一下么。。
ans(b, d) - ans(b, c - 1) - ans(a - 1, d) + ans(a - 1, c - 1)

[SDOI2015]约数个数和

根据一个令人头秃的公式
σ 0 ( i j ) = ∑ x ∣ i ∑ y ∣ j [ g c d ( x , y ) = = 1 ] \sigma_{0}(ij)=\sum_{x|i}\sum_{y|j}[gcd(x,y)==1] σ0(ij)=xiyj[gcd(x,y)==1]
然后我们就开心地反演吧//不对我式子推错了 等待update

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值