D. Small GCD
1.D. Birthday Gift2.P2613 【模板】有理数取余3.P2657 [SCOI2009] windy 数4.P8754 [蓝桥杯 2021 省 AB2] 完全平方数5.C. Nikita and LCM6.G. D-Function7.A. Bitwise Operation Wizard8.M. 渚千夏的串9.E. Look Back10.数论里的欧拉定理,简单证明,非常简单11.D. Same GCDs12.B. Missing Subsequence Sum13.P2568 GCD
14.D. Small GCD
15.C. Jellyfish and Green Apple16.C. Even Subarrays17.F - x = a^b18.D - Square Pair题解
由于答案之和最小的两个数有关,所以我们可以把数组排序
然后遍历数组,对于第
实施
预处理所有数的因子,然后从大到小遍历,时间复杂度
code
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll a[80005];
vector<ll> fac[100005];
ll f[100005]={0};
ll g[100005]={0};
void solve()
{
memset(f,0,sizeof f);
memset(g,0,sizeof g);
int n;
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+1+n);
ll ans=0;
for(int i=1;i<=n;i++)
{
for(auto it:fac[a[i]])
{
f[it]=g[it];//g[it] 代表[1,i-1] 内,含有因子it 的个数
for(auto j:fac[a[i]/it])//为什么是fac[a[i]/it]?因为要排除 it*k,有的k不一定出现
{
if(j==1) continue;
f[it]-=f[it*j];
}
ans+=it*f[it]*(n-i);
g[it]++;
}
}
cout<<ans<<'\n';
}
int main()
{
for(int i=1e5;i>=1;i--)
{
for(int j=i;j<=1e5;j+=i) fac[j].push_back(i);
}
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int t=1;
cin>>t;
while(t--) solve();
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效