难题

难题

题意

定义 f(i) 为非 i 因数的最小正整数,给出 n,求 i=1nf(i)mod109+7

思路

显然 f(i)2

f(i)=x,则 f(i) 一定为 lcm(1,2,,x1) 的倍数,但不是 lcm(1,2,,x) 的倍数。

可以枚举 x,统计有多少个数的答案为 x,即:

ans=x=2x×(nlcm(1,2,,x1)nlcm(1,2,,x))

化简一下可以得到:

ans=2n+x=2nlcm(1,2,,x)

代码

#include <bits/stdc++.h>
#define int long long
using namespace std;

const int N = 1e6 + 5;
const int mod = 1e9 + 7;

signed main() {
	freopen("math.in", "r", stdin);
	freopen("math.out", "w", stdout);
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	int T; cin >> T;
	while (T --) {
		int n, ans, l = 1; cin >> n;
		ans = 2 * n % mod;
		for (int i = 2; ; i ++) {
			l = lcm(l, i);
			ans += (n / l), ans %= mod;
			if (l > n) break;
		}
		cout << ans << "\n";
	}
	return 0; 
}
posted @   maniubi  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示