UESTC - 1724 GCD区间求和
2024-08-26 07:00:30
依然是神奇的欧拉函数
若GCD(n,i)=k
则GCD(n/k,i/k)=1,
令i/k=x,有GCD(n/k,x)=1,
→k*GCD(n/k,x)=1中x的个数 = GCD(n,i)=k的和
范围就是求n的所有因子k
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e6+11;
typedef unsigned long long ll;
ll phi[maxn];
void euler(int n){
for(int i = 1; i <= n; i++){
phi[i]=i;
}
for(int i = 2; i <= n; i++){
if(phi[i]==i){
for(int j = i; j <= n; j+=i){
phi[j]=phi[j]/i*(i-1);
}
}
}
}
vector<int> P;
void chai(int n){
P.clear();
for(ll i = 1; i*i <= n; i++){
if(n%i==0){
P.push_back(i);
if(n/i!=i) P.push_back(n/i);
}
}
}
int a[maxn],n;
int main(){
euler(maxn-1);
while(scanf("%d",&n)!=EOF){
ll ans=0;
for(int i = 1; i <= n; i++) scanf("%d",&a[i]);
for(int i = 1; i <= n; i++){
chai(a[i]);
for(int j = 0; j < P.size(); j++){
ans+=phi[a[i]/P[j]]*P[j];
}
ans-=a[i];
}
printf("%llu\n",ans);
}
return 0;
}
最新文章
- 直播推流端弱网优化策略 | 直播 SDK 性能优化实践
- 图说C++对象模型:对象内存布局详解
- [No000041]如果你被ruby惯坏了,不如试试python3-在Windows下安装ipython
- ENode 1.0 - 框架的物理部署思路
- 25款创新的 PSD 格式搜索框设计素材【免费下载】
- Objective C类方法load和initialize的区别
- Nginx NLB 及Redis学习
- Commons Math - Primes
- debian 开启SSH
- jQuery登陆判断简单实现代码
- 用POP动画引擎实现衰减动画(POPDecayAnimation)
- 【.NET特供-第三季】ASP.NET MVC系列:MVC与三层图形对照
- Qt将窗体变为顶层窗体
- 23.Linux-块设备驱动(详解)
- Git 和 Repo常用命令
- Python实现正则表达式匹配任意的邮箱
- Cylinder Candy(积分+体积+表面积+旋转体)
- echarts x轴文字显示不全(xAxis文字倾斜比较全面的3种做法值得推荐)
- Android widget
- Windows-设置系统服务不开机启动