C. Strange Function
考虑反想我们将x确定看看有多少个i
对于f[i]=x 我们显然i%lcm(1,2,3,...x-1)!=0
这里就可以通过容斥直接求解
i%lcm(1,2,3,...x-1)是含有1,2,3,...x-1因子的一个全集
而i%lcm(1,2,3,...x-1,x)是含有1,2,3,...x-1,x因子的一个全集
而我们求的啥 不含x因子的一个全集
所以ans就是n/lcm(1,2,3,...x-1)-n/lcm(1,2,3,...x-1,x)
#include <bits/stdc++.h>
using namespace std;
const int N = 2e5+10;
const int M = 998244353;
const int mod = 1e9+7;
#define int long long
int up(int a,int b){return a<0?a/b:(a+b-1)/b;}
#define endl '\n'
#define all(x) (x).begin(),(x).end()
#define YES cout<<"YES"<<endl;
#define NO cout<<"NO"<<endl;
#define _ 0
#define pi acos(-1)
#define INF 0x3f3f3f3f3f3f3f3f
#define fast ios::sync_with_stdio(false);cin.tie(nullptr);
int lcm[42];
void solve() {
int n;cin>>n;
int ans=0;
for(int i=2;i<=41;i++){
(ans+=(n/lcm[i-1]-n/lcm[i])*i)%=mod;
}
cout<<ans<<endl;
}
signed main(){
fast
int t;t=1;cin>>t;
lcm[1]=1;
for(int i=2;i<=41;i++)lcm[i]=i/__gcd(lcm[i-1],i)*lcm[i-1];
while(t--) {
solve();
}
return ~~(0^_^0);
}
标签:...,const,int,全集,Codeforces,Div,lcm,i%,729
From: https://www.cnblogs.com/ycllz/p/16800655.html