线性筛 + 递推
#include <bits/stdc++.h> const int N = 1e6 + 10, Mod = 1e9 + 7; int n; int phi[N], prime[N], tot, ans; bool mark[N]; int k; int f[N]; void Getphi() { for(int i = 2; i <= k; i ++) { if(!mark[i]) { prime[++ tot] = i; } for(int j = 1; j <= tot; j ++) { if(i * prime[j] > N) break; mark[i * prime[j]] = 1; } } for(int i = 1; i <= tot; i ++) f[prime[i]] = 1; } int main() { std:: cin >> k; Getphi(); for(int i = 0; i <= k; i ++) f[i] = 1; for(int i = 2; i <= k / 2; i ++) for(int j = 2; i * j <= k; j ++) //if(!vis[i * j]) f[i * j] = (f[i * j] + f[i]) % Mod; std:: cout << f[k]; return 0; }