P2158 [SDOI2008]仪仗队

题目描述

作为体育委员,C君负责这次运动会仪仗队的训练。仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图)。 现在,C君希望你告诉他队伍整齐时能看到的学生人数。


错误日志: 没有特判 \(N = 1\) 的情况


Solution

除开 \((0,1) (1,0) (0,0)\) 这三个点不谈, 可以发现一个点可以被看到, 当且仅当 \(gcd(x, y) = 1\)

所以把目光放到互质

类似埃式筛法, 我们可以在 \(O(n\log n)\) 的时间内求出 \(1-n\) 的欧拉函数

void euler(int n){
for(int i = 2;i <= n;i++)phi[i] = i;
for(int i = 2;i <= n;i++){
if(phi[i] == i){
for(int j = i;j <= n;j += i){
phi[j] = phi[j] / i * (i - 1);
}
}
}
}

发现这题左上部分与右下部分是对称的, 因为 \(y = x\) 这条线上的点被 \((1,1)\) 盖住了, 所以欧拉函数实际上只累积到 \(n - 1\)

我们还要加上最开始除开的三个点

即所求为: $$2 * \sum_{i = 2}^{N - 1}{\phi(i)} + 3$$

注意特判 \(N = 1\) 的情况

Code

#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
#include<climits>
typedef long long LL;
using namespace std;
int RD(){
int out = 0,flag = 1;char c = getchar();
while(c < '0' || c >'9'){if(c == '-')flag = -1;c = getchar();}
while(c >= '0' && c <= '9'){out = out * 10 + c - '0';c = getchar();}
return flag * out;
}
const int maxn = 40019;
int num, phi[maxn];
void euler(int n){
for(int i = 2;i <= n;i++)phi[i] = i;
for(int i = 2;i <= n;i++){
if(phi[i] == i){
for(int j = i;j <= n;j += i){
phi[j] = phi[j] / i * (i - 1);
}
}
}
}
int main(){
num = RD();
if(num == 1){puts("0");return 0;}
euler(num - 1);
int ans = 0;
for(int i = 2;i <= num - 1;i++)ans += phi[i];
printf("%d\n", ans * 2 + 3);
return 0;
}

不知道有啥卵用的欧拉定理

若 $$a \perp n$$ 则

\[a^{\phi(n)\equiv}1(mod\ n)
\]

最新文章

  1. mysql 数据库服务中的应用程序
  2. LayaAir引擎——(一)
  3. Python模块(MySQLdb)
  4. C++学习24 虚析构函数
  5. 广州Uber优步司机奖励政策(1月18日~1月24日)
  6. c#XML操作类的方法总结
  7. 一种CListCtrl自绘效果
  8. HTML-----&lt;a&gt;、&lt;table&gt;、&lt;form&gt;解析
  9. C#中new的三种用法
  10. 关于linux系统CPU篇---&gt;不容易发现的占用CPU较高进程
  11. 同一个tomcat下面放多个项目 每个项目用不同的域名访问
  12. Linux NFS存储服务部署
  13. 图-&gt;存储结构-&gt;数组表示法(邻接矩阵)
  14. RSS阅读
  15. C语言typeof详解
  16. FAST:通过Floodlight控制器下发流表
  17. BZOJ3611:[HEOI2014]大工程(树形DP,虚树)
  18. Android中XML解析-SAX解析
  19. 【转】glumer Appium + Python环境搭建(移动端自动化)
  20. 跨境B2B电商

热门文章

  1. Task 6.2冲刺会议五 /2015-5-18
  2. pktgen-dpdk 实战
  3. APP案例分析-热血江湖
  4. By.cssSelector定位元素一个不足发现
  5. poj 1966(顶点连通度)
  6. Android ComponentName的用法
  7. Dubbo学习(一) Dubbo原理浅析
  8. python自动化之时间
  9. iOS BCD码、数据流、字节和MD5计算
  10. 【uoj#213】[UNR #1]争夺圣杯 单调栈+差分