CF1061C Multiplicity
Update:上传成 wa 的代码了,已修改。
dp 题。
设
当
所以状态转移方程是
但是注意到这个空间和时间都会寄,所以考虑优化。
我们注意到
还可以注意到,
#include <bits/stdc++.h>
using namespace std;
#define LL long long
#define pb push_back
#define rep(i, l, r) for (auto i = (l); i <= (r); ++i)
const int N = 1e6 + 5,
mod = 1e9 + 7;
LL a[N], dp[N];
int main() {
LL n; cin >> n;
dp[0] = 1;
rep (i, 1, n) {
cin >> a[i];
vector<LL> v;
for (LL j = 1; j * j <= a[i]; ++j) {
if (a[i] % j == 0) {
v.push_back(j);
if (j != a[i] / j) v.push_back(a[i] / j);
}
}
sort(v.begin(), v.end(), greater<LL>());
for (auto i : v) {
// (dp[i] += dp[i - 1]) %= mod;
dp[i] += dp[i - 1]; dp[i] %= mod;
}
}
LL ans = 0;
rep (i, 1, n) {
// (ans += dp[i]) %= mod;
ans += dp[i]; ans %= mod;
}
printf("%lld", ans % mod);
}