题目描述

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

输入输出格式

输入格式:

共一个数N

输出格式:

共一个数,即C君应看到的学生人数。

思路:

典型的欧拉筛

为了帮助萌新,我先从欧拉函数开讲

什么是欧拉函数?

定义:与一个数的约数有且只有1的数(互质)的个数(比如说2有1一个,6有1,5两个)

性质:积性函数(Phi(i)等于他的所有质因数的phi值的乘积)

为什么能这么做呢?

其实这道题求的是有多少种不同的斜率

为什么呢?

看图:

很显然,一个斜率上只能看到一个人,该斜率其他人都会被堵得死死的。。。

那么,每一个独立的斜率又如何表示呢?

我们用数对(x,y)表示斜率

我们知道,如果x,y不互质,那么他们可以同时除以他们的最大公约数(设为k),则该斜率可表示为(x/k,y/k)

很显然会有重复

所以为了避免重复,我们所求的是互质点对的个数

互质点对很显然就是欧拉函数

这里我用的是(nlogn)的算法——埃氏筛

从2开始,一个数i如果因数标记为1,则他是素数,他的欧拉函数值为i-1,同时,利用它来更新所有它的倍数的因数标记,如果因数标记大于1,则其不是素数,根据积性函数的性质,Phi[i]=其各因数的乘积,当其含有多次方因子时(比如8=2^3),那么Phi[i]的值为phi[2]*2*2;

不说了,代码:

#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
long long ll;
long long e[40010];
long long n,ans;
int main()
{
ans=2;
cin>>n;
if(n==1)
{
cout<<0;
return 0;
}
for(int i=1;i<=n;++i)
{
e[i]=i;
}
for(int i=2;i<=n;++i)
{
if(e[i]==i)
{
for(int j=i;j<=n;j+=i)
{
e[j]=e[j]/i*(i-1);
}
}
}
n--;
for(int i=2;i<=n;++i)
{
ans+=e[i]*2;
}
cout<<ans+1;
}

[SDOI2008]仪仗队(欧拉筛裸题)的更多相关文章

  1. 【BZOJ 2190】【SDOI 2008】仪仗队 欧拉筛

    欧拉筛模板题 #include<cstdio> using namespace std; const int N=40003; int num=0,prime[N],phi[N]; boo ...

  2. P2158 [SDOI2008]仪仗队 && 欧拉函数

    P2158 [SDOI2008]仪仗队 题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线 ...

  3. P2158 [SDOI2008]仪仗队 欧拉函数模板

    题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图 ...

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

    题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图 ...

  5. BZOJ2190 [SDOI2008]仪仗队 [欧拉函数]

    题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图 ...

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

    假设C君为(0, 0), 则右上方为(n - 1, n - 1). 一个点(x, y) 能被看到的前提是gcd(x, y) = 1, 所以 answer = ∑ phi(i) * 2 + 2 - 1 ...

  7. HDU3501——欧拉函数裸题

    给整数N(1 ≤ N ≤ 1000000000),求小于N的与N不互素的所有正整数的和. 思路:1.用欧拉函数求出小于N的与N互素的正整数的个数: 2.若 p 与 N 互素,则 N-p 必与 N 互素 ...

  8. POJ_2407 Relatives 【欧拉函数裸题】

    一.题目 Given n, a positive integer, how many positive integers less than n are relatively prime to n? ...

  9. 2190: [SDOI2008]仪仗队(欧拉函数)

    2190: [SDOI2008]仪仗队 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 3235  Solved: 2089 Description 作 ...

随机推荐

  1. OpenLayers 3 实现轨迹回放

    function PathBack() { var PVLayer = new ol.layer.Vector({ source: new ol.source.Vector({}) }); var p ...

  2. poj 1655 树的重心 && define注意事项

    http://blog.csdn.net/acdreamers/article/details/16905653 题意:给定一棵树,求树的重心的编号以及重心删除后得到的最大子树的节点个数size,如果 ...

  3. 两个command的疑惑

    1.在cqrs模式中有command和query command  命令  没有返回值,但会更改对象的状态 query 查询  有返回值  但不会改变用户的状态,对下同而言没有副作用 2.在今天的实际 ...

  4. STROME --realtime & online parallel computing

    Data Collections ---> Stream to Channel (as source input) ----> Parallel Computing---> Resu ...

  5. dpkg 打包root权限app

    dpkg 安装Macports 下载对应系统的Macports安装时间会比较久,安装完毕后放在了/opt/local/bin 目录下 安装dpkg 打开终端,输入 sudo port -f insta ...

  6. matlab练习程序(Arnold图像置乱)

    自从上次写了Hilbert图像置乱之后,就对图像置乱研究了一下,发现这里面也是有很多置乱算法的. Arnold也算一种比较主要的置乱算法,算法由以下变换公式产生: 这里a和b是参数,n是迭代次数,N是 ...

  7. matlab绘图(详细)(全面)

    Matlab绘图 强大的绘图功能是Matlab的特点之一,Matlab提供了一系列的绘图函数,用户不需要过多的考虑绘图的细节,只需要给出一些基本参数就能得到所需图形,这类函数称为高层绘图函数.此外,M ...

  8. SQL Server ->> 查看SQL Server备份历史

    找到最近数据库备份的细节信息,包括备份设备名和地址,最后备份时间 ------------------------------------------------------------------- ...

  9. php提示undefined index的几种解决方法

    平时用$_post[''],$_get['']获取表单中参数时会出现Notice: Undefined index: -------- 我们经常接收表单POST过来的数据时报Undefined ind ...

  10. ZT 困难是什么?困

    困难是什么?困难就是摆在我们面前的山峰,需要我们去翻越;困难就是摆阻碍我们前行的巨浪,需要我们扬帆劈刀斩浪航行:困难就是我们眼前所下的暴风雨,要坚信暴风雨过后会有阳光和彩虹. 其实困难并不可怕,怕的就 ...