【Codeforces1542C】Strange Function(数论)

题目大意:

\(i\)为能被\(1,2,......,x-2,x-1\)整除,不能被\(x\)整除,则\(f(i)=x\),计算\(\sum_{i=1}^{n}f(i)\)


\(g(x)\)\(1~n\)中满足条件\(x\)的数的数量,\(k\)为使\(lcm(1,2,......,k)>n\)的最小值。

\(\sum_{i=1}^{n}f(i)\)

\(=2\times g(能被1整除,不能被2整除)+3\times g(能被1、2整除,不能被3整除)\)

\(+...+n\times g(能被1、2、……、k-1整除,不能被n整除)\)

\(=2\times (g(能被1整除)-g(能被1、2整除))+3\times (g(能被1、2整除)-g(能被1、2、3整除))\)

\(+...+k\times (g(能被1、2、……、k-1整除)-g(能被1、2、……、k整除))\)

\(=2\times g(能被1整除)+g(能被1、2整除)+......+\)

\(g(能被1、2、……、k-1整除)-k\times g(能被1、2、……k整除)\)

\(=2\times \lfloor\frac{n}{1}\rfloor+\lfloor\frac{n}{lcm(1,2)}\rfloor+\lfloor\frac{n}{lcm(1,2,3)}\rfloor+......+\lfloor\frac{n}{lcm(1,2,3,......k-1)}\rfloor-\lfloor\frac{n}{lcm(1,2,3,......,k-1,k)}\rfloor\)

\(=2\times n+\lfloor\frac{n}{lcm(1,2)}\rfloor+\lfloor\frac{n}{lcm(1,2,3)}\rfloor+......+\lfloor\frac{n}{lcm(1,2,3,......k-1)}\rfloor\)

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
ll n;
ll lcm(ll x,ll y){
	return x/__gcd(x,y)*y;
}
int main(){
	int T;
	cin >> T;
	while(T--){
		cin >> n;
		ll ans=n%mod;
		for(ll i=1,j=1;n/j;i++,j=lcm(j,i)){
			ans=(ans+n/j)%mod;
		}
		cout << ans << endl;
	}
	return 0;
}
posted @ 2023-08-31 21:49  Alric  阅读(16)  评论(0编辑  收藏  举报