社区讨论
不用莫反暴力A了?
P1390公约数的和参与者 4已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @m5do6rzy
- 此快照首次捕获于
- 2025/01/01 17:03 去年
- 此快照最后确认于
- 2025/11/04 12:05 4 个月前
先预处理欧拉函数,再用整除分块枚举 gcd 再用欧拉函数计算答案,时间 ,居然 A 了?
CPP#include<bits/stdc++.h>
using namespace std;
int n,x,a[150000],c[2000005];
bool b[2000005];
long long ans=0;
int gcd(int x,int y)
{
return x%y==0?y:gcd(y,x%y);
}
int main()
{
cin>>n;
for (int i=2;i<=n;++i)
{
if (!b[i])
{
a[++a[0]]=i;
c[i]=i-1;
}
for (int j=1;j<=a[0] && i*a[j]<=n;++j)
{
b[i*a[j]]=1;
if (i%a[j])
c[i*a[j]]=c[i]*c[a[j]];
else
{
c[i*a[j]]=c[i]*a[j];
break;
}
}
}
for (int k=1;k<=n;k=x+1)
{
x=n/(n/k);
for (int i=2;i<=n/k;++i)
ans+=((long long)(k+x)*(x-k+1)>>1)*c[i];
}
cout<<ans;
}
回复
共 4 条回复,欢迎继续交流。
正在加载回复...