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 }