您的位置:首页 > 其它

UVA 11426 GCD - Extreme (II)

2017-04-24 20:53 246 查看
G=0;
for(i=1;i<N;i++)
for(j=i+1;j<=N;j++)
{
  G+=gcd(i,j);
}

SampleInput
10
100
200000
0
SampleOutput
67
13015
143295493160

#include <algorithm>
#include <iostream>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <map>
using namespace std;
typedef long long LL;
const LL N = 4000000 + 10;
const LL MOD = 1000;
LL s
, f
, phi
;
void funp()
{
LL i, j;
for(i = 2; i < N; i++)
phi[i] = 0;
phi[1] = 1;
for(i = 2; i < N; i++)
if(!phi[i]) {
for(j = i; j < N; j += i) {
if(!phi[j])
phi[j] = j;
phi[j] = phi[j] / i * (i - 1);
}
}
}
LL init()
{
LL i, j;
funp();
for(i = 1; i < N; i++) {
for(j = i + i; j < N; j += i)
f[j] += i * phi[j / i];
}
s[2] = f[2];
for(i = 3; i < N; i++)
s[i] = s[i - 1] + f[i];
}
int main()
{
LL n;
init();
while(scanf("%lld", &n), n) {
printf("%lld\n", s
);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: