CF1542C Strange Function
设 \(f_i = k\),那么对于 \(1 \sim k - 1\),都能整除 \(n\),然后 \(k\) 不能整除 \(n\)。
转化一下就是 \(L_{k - 1} = \text{lcm}(1, 2, \dots, k - 1)\) 都能整除 \(n\) 并且 \(k\) 不能整除 \(n\)。
那么,对于 \(i=1,2,\dots,n\),满足 \(L_{k−1}i|\) 的 \(i\) 共有 \(\lfloor\frac{i}{L_{k - 1}}\rfloor\) 个。
在这些 \(i\) 中,满足 \(k|i\) 的有 \(\lfloor \frac{i}{L_k} \rfloor\) 个。
所以,对每个 \(k\),满足 \(Lk−1∣i,k∤i\) 的 \(i\) 共有 \(\lfloor\frac{i}{L_{k - 1}}\rfloor - \lfloor \frac{i}{L_k} \rfloor\) 个。
因此,
\[\sum_{i = 1}^{n}f(i) = \sum_{L_k \leq n} k \times (\lfloor\frac{k}{L_{k - 1}}\rfloor - \lfloor \frac{k}{L_k} \rfloor)
\]
#include<bits/stdc++.h>
//#include<atcoder/all>
#define F(i,l,r) for(int i(l); i <= (r); ++ i)
#define G(i,r,l) for(int i(r); i >= (l); -- i)
#define mp make_pair
#define fi first
#define se second
#define pii pair<int, int>
using namespace std;
//using namespace atcoder;
using ll = long long;
const int N = 3e5;
const int mod = 1e9 + 7;
ll n;
ll f[100];
void Main(){
ll ans = 0;
cin >> n;
F(i, 2, 41){
ans = (ans + i * (n / f[i - 1] - n / f[i])) % mod;
}
cout << ans << '\n';
return ;
}
signed main(){
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
// ll g = 1;
f[1] = 1;
F(i, 2, 41){
f[i] = i / __gcd(f[i - 1], ll(i)) * f[i - 1];
// printf("f[ %d ] = %lld\n", i, f[i]);
}
int T;
cin >> T;
while(T --) Main();
return fflush(0), 0;
}

浙公网安备 33010602011771号