题意
给定
n,m
,求
mNmodP
。其中,
P=999999599
,
N
为将
Time Limits:3000ms
Memory Limits:256M
分析
根据费马小定理, mN=mNmod(P−1) ,这个可用快速幂算。我们的问题就是如何求 Nmod(P−1) 。
我们先想 O(N2) 的算法。因为每个正整数都能使用若干次,那么这就是一个完全背包问题。但是本题中此算法的复杂度显然不可接受。
我们把正整数以
N−−√
分界。
那么对于小于等于
N−−√
的正整数,我们直接完全背包,求出用它们组成和为
i
的方案数,记为
对于大于
N−−√
的正整数,可以发现,我们最多只会选择
N−−√
个。记
k=N−−√
,我们考虑这样一个方程:
设
g[i][j]
为已经选了
i
个数,它们的和为
转移:
g[i][j]=g[i−1][j−k]+g[i][j−i]
这个方程是什么意思呢?
我们把每个选择的数
xi
都看成由
k
加上
这样,我们就同样能以
注意:求
f
和