POJ 3090 欧拉函数

Posted Flowersea

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ 3090 欧拉函数相关的知识,希望对你有一定的参考价值。

链接:

http://poj.org/problem?id=3090

题意:

有一个n*n的二维格点,问在原点(0,0)处能看到多少个格点?

题解:

计算每个数的欧拉函数,然后就是前缀和*2+1就可以了

代码:

31 int getphi(int n) {
32     int ans = n;
33     for(int i = 2; i*i <= n; i++) {
34         if (n%i == 0) {
35             ans -= ans / i;
36             while (n%i == 0) n /= i;
37         }
38     }
39     if (n > 1) ans -= ans / n;
40     return ans;
41 }
42 
43 int a[MAXN];
44 
45 int main() {
46     ios::sync_with_stdio(false), cin.tie(0);
47     rep(i, 1, MAXN) a[i] = getphi(i), a[i] += a[i - 1];
48     int T;
49     cin >> T;
50     rep(cas, 1, T + 1) {
51         int x;
52         cin >> x;
53         cout << cas <<   << x <<   << a[x] * 2 + 1 << endl;
54     }
55     return 0;
56 }

 

以上是关于POJ 3090 欧拉函数的主要内容,如果未能解决你的问题,请参考以下文章

POJ3090(SummerTrainingDay04-M 欧拉函数)

poj3090 Visible Lattice Points [欧拉函数]

POJ_3090 Visible Lattice Points 欧拉函数 + 递推

POJ 3090 Visible Lattice Points | 其实是欧拉函数

POJ3090 Visible Lattice Points

[poj] 3090 Visible Lattice Points