【Luogu】P2158仪仗队(欧拉函数)
首先来介绍欧拉函数。
设欧拉函数为f(n),则f(n)=1~n中与n互质的数的个数。
欧拉函数有三条引论:
1.若n为素数,则f(n)=n-1;
2.若n为pa,则f(n)=(p-1)*(pa-1)。
3.若gcd(a,b)=1,则f(a*b)=f(a)*f(b)。
下面代码给出欧拉函数的求法。可以和线性筛结合。
for(register int i=;i<n;++i){
if(!f[i]){
prime[++num]=i;
phi[i]=i-;
}
for(int j=;j<=num&&prime[j]*i<n;++j){
f[i*prime[j]]=;
if(!(i%prime[j])){
phi[i*prime[j]] = phi[i] * prime[j];
break;
}
phi[i*prime[j]]=phi[i]*(prime[j]-);
}
}
phi数组是欧拉函数值。
那欧拉函数和本题有什么关系呢?
我们知道对于坐标点(i*k,j*k),它一定会被点(i,j)阻挡。
换句话说设i*k=a,j*k=b。
只要gcd(a,b)!=1则会被阻挡。
因此要求的是范围内满足条件gcd(a,b)=1的点(a,b)有多少个。
因为正方形关于对角线对称,所以可以只算左下部分,右上部分是和左下部分相等的。
因为是左下部分,所以a>=b。
原题变成了求∑phi(i),其中i=1~n。
代码如下。
#include<cstdio>
#include<cctype>
inline long long read(){
long long num=,f=;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-') f=-;
ch=getchar();
}
while(isdigit(ch)){
num=num*+ch-'';
ch=getchar();
}
return num*f;
} int prime[],num;
bool f[];
bool d[];
int phi[];
int ans;
int main(){
int n=read();
for(register int i=;i<n;++i){
if(!f[i]){
prime[++num]=i;
phi[i]=i-;
}
for(int j=;j<=num&&prime[j]*i<n;++j){
f[i*prime[j]]=;
if(!(i%prime[j])){
phi[i*prime[j]] = phi[i] * prime[j];
break;
}
phi[i*prime[j]]=phi[i]*(prime[j]-);
}
}
for(register int i=;i<n;++i) ans+=phi[i];
printf("%d",ans*+);
return ;
}
【Luogu】P2158仪仗队(欧拉函数)的更多相关文章
- 洛谷 - P2158 - 仪仗队 - 欧拉函数
https://www.luogu.org/problemnew/show/P2158 好像以前有个妹子收割铲也是欧拉函数. 因为格点直线上的点,dx与dy的gcd相同,画个图就觉得是欧拉函数.但是要 ...
- P2158 [SDOI2008]仪仗队 && 欧拉函数
P2158 [SDOI2008]仪仗队 题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线 ...
- 洛谷P2158 [SDOI2008]仪仗队 欧拉函数的应用
https://www.luogu.org/problem/P2158 #include<bits/stdc++.h> #define int long long using namesp ...
- P2158 [SDOI2008]仪仗队 欧拉函数模板
题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图 ...
- 【P2158】仪仗队&欧拉函数详解
来一道数论题吧. 这个题一眼看上去思路明确,应该是数论,但是推导公式的时候却出了问题,根本看不出来有什么规律.看了马佬题解明白了这么个规律貌似叫做欧拉函数,于是就去百度学习了一下这东西. 欧拉函数的含 ...
- BZOJ2190 [SDOI2008]仪仗队 [欧拉函数]
题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图 ...
- 【bzoj2190】[SDOI2008]仪仗队 欧拉函数
题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图 ...
- Bzoj-2190 仪仗队 欧拉函数
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2190 简单的欧拉函数题,实际上就是求gcd(x,y)=1, 0<=x,y<=n ...
- luogu2158 [SDOI2008]仪仗队 欧拉函数
点 $ (i,j) $ 会看不见当有 $ k|i $ 且 $ k|j$ 时. 然后就成了求欧拉函数了. #include <iostream> #include <cstring&g ...
- BZOJ 2190: [SDOI2008]仪仗队( 欧拉函数 )
假设C君为(0, 0), 则右上方为(n - 1, n - 1). 一个点(x, y) 能被看到的前提是gcd(x, y) = 1, 所以 answer = ∑ phi(i) * 2 + 2 - 1 ...
随机推荐
- python-mysql软件下载地址
http://sourceforge.net/projects/mysql-python/?source=dlp
- dataSource' defined in class path resource [org/springframework/boot/autocon
spring boot启动的时候抛出如下异常: dataSource' defined in class path resource [org/springframework/boot/autocon ...
- spring_boot入门
核心: 控制反转(Inversion of Control-IOC)和依赖注入(Dependency Injection-DI) Spring中两者是相同的, 控制反转是用依赖注入实现的. 这里, 依 ...
- Mybatis Cache 缓存策略
Mybatis Cache 缓存策略 正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的支持 一级缓存: 基于PerpetualCache 的 HashMap本地缓存,其存储作用 ...
- Google Colab调用cv2.imshow奔溃
当我在Google Colab运行如下代码 import cv2 import numpy as np image = cv2.imread('a.jpg') cv2.imshow('original ...
- MIPS——分支语句
有关指令 li $t1,immediate #load immediate,立即数可正可负 la $t1,address #load address move $t1,$t2 #move $t2 to ...
- winhex与磁盘格式与 数据恢复
第一阶段: 熟悉WinHex的使用. n 熟悉磁盘工具的使用. n 利用WinHex查看物理磁盘和逻辑磁盘. n 了解WinHex中相关工具的用法. 以管理员身份运行winhex(以便之后修改) 上方 ...
- QT +自定义控件-spin+slider
动手实现自定义控件: 1.首先在ui界面中添加一个(Widget)容器类.如图中的1所示 2.在项目中添加一个SmallWidget类,如下: 3.接着在程序编辑界面进行程序编辑如下: #includ ...
- Noip2016 提高组 蚯蚓
刚看到这道题:这题直接用堆+模拟不就可以了(并没有认真算时间复杂度) 于是用priority_queue水到了85分-- (STL大法好) 天真的我还以为是常数问题,于是疯狂卡常--(我是ZZ) 直到 ...
- 响应式Web设计- Viewport
什么是Viewport? viewport是用户网页的可视区域, 翻译为中文可以叫做"视区". 设置Viewport 一个常用的针对移动网页优化过的页面的Viewport meta ...