欧拉函数入门题...

当然如果有兴趣也可以用反演做...类似这题

题意就是求,方阵从左下角出发能看到多少个点。

从0开始给坐标

发现一个点能被看到,那么横纵坐标互质。

然后求欧拉函数的前缀和,* 2 + 1即可。

注意特判。

 1 #include <cstdio>
 2 const int N = 40010;
 3 
 4 int p[N], phi[N], top;
 5 bool vis[N];
 6 
 7 inline void getphi(int b) {
 8     phi[1] = 1;
 9     for(int i = 2; i <= b; i++) {
10         if(!vis[i]) {
11             p[++top] = i;
12             phi[i] = i - 1;
13         }
14         for(int j = 1; j <= top && i * p[j] <= b; j++) {
15             vis[i * p[j]] = 1;
16             if(i % p[j] == 0) {
17                 phi[i * p[j]] = phi[i] * p[j];
18                 break;
19             }
20             phi[i * p[j]] = phi[i] * (p[j] - 1);
21         }
22     }
23     return;
24 }
25 
26 int main() {
27     int n;
28     scanf("%d", &n);
29     if(n == 1) {
30         printf("0");
31         return 0;
32     }
33     n--;
34     getphi(n);
35     int ans = 0;
36     for(int i = 1; i <= n; i++) {
37         ans += phi[i];
38     }
39     ans = ans * 2 + 1;
40     printf("%d", ans);
41 
42     return 0;
43 }
AC代码

相关文章:

  • 2020-11-02
  • 2021-12-29
  • 2022-01-16
  • 2021-07-31
  • 2021-07-07
  • 2021-05-18
  • 2022-12-23
猜你喜欢
  • 2021-12-01
  • 2022-02-16
  • 2021-09-13
  • 2022-12-23
  • 2022-01-21
  • 2021-10-11
  • 2021-09-12
相关资源
相似解决方案