uva 11424

uva 11424 GCD - Extreme (I)

题意:思路:(见http://www.cnblogs.com/Duahanlang/p/3184994.html )

差别在于数据规模和时间,其他一下,同样的思路,同样的做法

代码:

 

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cmath>
 4 #include <cstring>
 5 #include <algorithm>
 6 #include <vector>
 7 using namespace std;
 8 
 9 typedef long long LL;
10 const int N = 200005;
11 int e[N];
12 LL tag[N];
13 
14 void euler()
15 {
16     memset(tag, 0, sizeof(tag));
17     for(int i = 1; i < N; ++i)  e[i] = i;
18     for(int j = 2; j < N; ++j)
19     {
20         if(e[j] == j)
21             for(int i = j; i < N; i += j)
22                 e[i] -= e[i] / j;
23         for(int i = 1; i*j < N; i++)
24             tag[i*j] += i*e[j];
25     }
26     for(int i = 1; i < N; ++i)  tag[i] += tag[i-1];
27 }
28 
29 int main()
30 {
31     euler();
32     int n;
33     while(scanf("%d", &n), n)
34         printf("%lld\n", tag[n]);
35     return 0;
36 }
View Code

 

 

 

转载于:https://www.cnblogs.com/Duahanlang/p/3232212.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值