BZOJ2190 SDOI2008 仪仗队 gcd,欧拉函数

题意:求从左下角能看到的元素个数

引理:对点(x,y),连线(0,0)-(x,y),元素个数为gcd(x,y)-1(中间元素)

即要求gcd(x,y)=1

求gcd(x,y)=1的个数

转化为2 \sum_(i=1)^(n-1) \phi(i) - 1 (思考如何转化)

感性分析,理性计算

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3
 4 int n,phi[100005];
 5
 6 int main(){
 7     cin>>n;
 8     phi[1]=1;
 9     for(int i=2;i<=n;i++) phi[i]=i;
10     for(int i=2;i<=n;i++)
11         if(phi[i]==i)
12             for(int j=i;j<=n;j+=i)
13                 phi[j]=phi[j]/i*(i-1);
14     long long ans=0;
15     for(int i=1;i<n;i++) ans+=phi[i];
16     if(n==1) cout<<0;
17     else cout<<2*ans+1<<endl;
18     return 0;
19 }

原文地址:https://www.cnblogs.com/mollnn/p/8439670.html

时间: 2024-12-06 20:36:50

BZOJ2190 SDOI2008 仪仗队 gcd,欧拉函数的相关文章

BZOJ2190 [SDOI2008]仪仗队(欧拉函数)

与HDU2841大同小异. 设左下角的点为(1,1),如果(1,1)->(x,y)和(1,1)->(x',y')向量平行,那只有在前面的能被看见.然后就是求x-1.y-1不互质的数对个数. 而x或y等于1可以另外讨论一下,就是当n不等于1时就有两个,n等于1就特判一下. 那么就用欧拉函数计数了:枚举x-1,累加小于x-1与x-1互质的个数,即合法的y-1的个数:结果还要*2,因为还有一半对称的y-1>x-1的情况:此外x-1=y-1多算了一次,减去1即可. 1 #include<c

【BZOJ】2190: [SDOI2008]仪仗队(欧拉函数)

http://www.lydsy.com/JudgeOnline/problem.php?id=2190 一开始没想到QAQ看了题解恍然大悟,虽然做法和题解不同.. 因为以1开头或结尾的坐标的比较特殊,所以首先不考虑先. 考虑从2开始的坐标,发现当这个点不在以点(1,1)放出的射线第一个遇到的点时,则不选.意思就是说,不是第一个点的倍数! 因此想到当坐标gcd(x, y)!=1时,这个点看不到!因为d=gcd(x, y)!=1,显然有坐标(x/d, y/d)在这条线上!(可以用斜率来搞搞..但是

P2158 [SDOI2008] 仪仗队(欧拉函数模板)

题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图). 现在,C君希望你告诉他队伍整齐时能看到的学生人数. 分析就不写了都写得很<<<<全>>>>了就当看模板叭 #include<iostream> #include<cstdio> using namespace std; typede

2190. [SDOI2008]仪仗队【欧拉函数】

Description 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图). 现在,C君希望你告诉他队伍整齐时能看到的学生人数. Input 共一个数N. Output 共一个数,即C君应看到的学生人数. Sample Input 4 Sample Output 9 HINT [数据规模和约定] 对于 100% 的数据,1 ≤ N ≤ 40000 首先设左

[BZOJ 2190][SDOI2008]仪仗队(欧拉函数)

Description 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图).现在,C君希望你告诉他队伍整齐时能看到的学生人数. Solution 能被看到的只能是坐标(x,y)x与y互质的学生 观察可以发现1到n-1欧拉phi函数的和*2+1即答案 #include<iostream> #include<cstdio> #include<

HDU 1695 GCD 欧拉函数+容斥原理+质因数分解

链接:http://acm.hdu.edu.cn/showproblem.php?pid=1695 题意:在[a,b]中的x,在[c,d]中的y,求x与y的最大公约数为k的组合有多少.(a=1, a <= b <= 100000, c=1, c <= d <= 100000, 0 <= k <= 100000) 思路:因为x与y的最大公约数为k,所以xx=x/k与yy=y/k一定互质.要从a/k和b/k之中选择互质的数,枚举1~b/k,当选择的yy小于等于a/k时,可以

HDU 2588 GCD (欧拉函数)

GCD Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1013    Accepted Submission(s): 457 Problem Description The greatest common divisor GCD(a,b) of two positive integers a and b,sometimes writt

hdu 1695 GCD 欧拉函数+容斥

题意:给定a,b,c,d,k x属于[1 , c],y属于[1 , d],求满足gcd(x,y)=k的对数.其中<x,y>和<y,x>算相同. 思路:不妨设c<d,x<=y.问题可以转化为x属于[1,c / k ],y属于[1,d/k ],x和y互质的对数. 那么假如y<=c/k,那么对数就是y从1到c/k欧拉函数的和.如果y>c/k,就只能从[ c/k+1 , d ]枚举,然后利用容斥.详见代码: /****************************

hdu2588 gcd 欧拉函数

GCD Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1567    Accepted Submission(s): 751 Problem Description The greatest common divisor GCD(a,b) of two positive integers a and b,sometimes writte