CF1542C Strange Function

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;
}
posted @ 2026-10-14 19:37  superl61  阅读(3)  评论(0)    收藏  举报