http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=10576
∑Ni=1∑i−1j=1gcd(i,j)
预处理
∑Ni=1gcd(i,j)
同
http://blog.youkuaiyun.com/wen_xp/article/details/53236549
#include<cstdio>
#include<iostream>
using namespace std;
const int N=1e6+100;
typedef long long LL;
LL phi[N],ans[N];
void init(){
int ed=1000000;
for(int i=2;i<=ed;i++){
if(phi[i])continue;
for(int j=i;j<=ed;j+=i){
if(phi[j]==0)phi[j]=j;
phi[j]=phi[j]/i*(i-1);
}
}
for(int i=2;i<=ed;i++){
ans[i]=phi[i];
}
for(int i=2;i*i<=ed;i++){
ans[i*i]+=phi[i]*i;
for(int j=i+1;j*i<=ed;j++){
ans[j*i]+=phi[i]*j+phi[j]*i;
}
}
for(int i=1;i<=ed;i++){
ans[i]+=ans[i-1];
}
}
int main(){
init();
int n;
while(scanf("%d",&n),n){
printf("%lld\n",ans[n]);
}
return 0;
}
本文介绍了一种通过预处理解决特定数论问题的方法。针对∑Ni=1∑i−1j=1gcd(i,j)的计算问题,采用高效算法进行优化。通过对phi函数的计算并累积求和实现快速解答。

173

被折叠的 条评论
为什么被折叠?



