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

 

 

 

posted @ 2013-08-02 11:32  妮king狼  阅读(316)  评论(0编辑  收藏  举报