题面

$ solution: $

讲真吧,这道题真的出得,嗯,太恐怖了。考场上这道题真的把我看懵了,这道题以前是见过的,但欧拉函数?我学过吗?一道容斥都要超时的题目,我都要为我自己点根香了,拿着gcd一顿乱搞,果然搞出了个0分。不得不承认博主的数学真的太渣了,但这道题的解题思路真的太妙了(因为渣所以必须学习!)。

首先,一个必须要知道的东西,操场是环形的(即 \((mod~n)\) 意义下的)。若第$ k $个格子可以被第 $ i $ 个同学踩到,那么必定存在一个 $ x $ 使 $ x\times a_i $ 在 \((mod~n)\)之后等于 $ k $ !而这也就相当于:存在一对 $ x $ 和 $ y $ 使得 $ x\times a_i-y*n=k $

而这也就牵扯到我们整除的一些性质了,要满足上面这个式子有整数解,充要条件是 $ (a_i,n)|k $ 也就是说所有能被 $ (a_i,n) $ 整除的格子都可以被第 $ i $ 位同学踩到!!!可是这样的话,有可能一个格子会被多个同学踩到,我们怎么去重呢?

我们发现产生重复的原因是我们的充要条件即 $ (a_i,n)|k (i\in m)$ ,有可能存在多个 $ i $ 能使条件成立,并存在多个 $ i $ 使它们的 $ (a_i,n) $ 存在公因数,然后我们考虑如何让重复的情况只出现一次:就是枚举\(n\)的约数(把 $ (a_i,n) $ 所有可能的值枚举一遍),枚举并判断它是否有贡献之后我们不算存在多少 $ k $ 可以整除它,我们只算有多少 $ (k,n) $ 能等于它。(因为我们枚举的 $ n $ 的约数会包括它的倍数,当下我们只算好它的贡献!)

我们把枚举的约数定为 $ d $ ,那我们就只要求有多少个 $ k $ ,使 $ (k,n)=d $ ,也就是求有多少个 $ k $ ,使 $ (\frac{k}{d} ,\frac{n}{d})=1 $ 也就是求欧拉函数了。

$ code: $

#include<iostream>
#include<cstdio>
#include<iomanip>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<ctime>
#include<cmath>
#include<vector>
#include<queue>
#include<map>
#include<set> #define ll long long
#define db double
#define inf 0x7fffffff
#define rg register int using namespace std; int n,m,top,ans;
int a[55];
int b[100005]; inline int qr(){
char ch;
while((ch=getchar())<'0'||ch>'9');
int res=ch^48;
while((ch=getchar())>='0'&&ch<='9')
res=res*10+(ch^48);
return res;
} inline int gcd(int x,int y){
if(!y)return x;
return gcd(y,x%y);
} inline int phi(int x){//单独求欧拉函数
int y=x;
for(rg i=2;i<=top&&x>1;++i){
if(!(x%b[i]))y=y/b[i]*(b[i]-1);
while(!(x%b[i]))x/=b[i];
}return y;
} int main(){
//freopen("running.in","r",stdin);
//freopen("running.out","w",stdout);
ans=n=qr(),m=qr();
for(rg i=1;i<=m;++i)a[i]=qr();
for(rg i=1;i<=sqrt(n);++i)
if(n%i==0)b[++top]=i,b[++top]=n/i;//枚举所有约数
sort(b+1,b+top+1);
for(rg i,k=1;k<=top;++k){
i=b[k];
for(rg j=1;j<=m;++j)
if(i%gcd(a[j],n)==0)//如果这个约数有贡献(即存在一个人使得(ai,n)|k)
{ans-=phi(n/i);break;}
} printf("%d\n",ans);
return 0;
}

五校联考 running (欧拉函数)的更多相关文章

  1. 【五校联考1day2】JZOJ2020年8月12日提高组T2 我想大声告诉你

    [五校联考1day2]JZOJ2020年8月12日提高组T2 我想大声告诉你 题目 Description 因为小Y 是知名的白富美,所以自然也有很多的追求者,这一天这些追求者打算进行一次游戏来踢出一 ...

  2. 【五校联考1day2】JZOJ2020年8月12日提高组T1 对你的爱深不见底

    [五校联考1day2]JZOJ2020年8月12日提高组T1 对你的爱深不见底 题目 Description 出乎意料的是,幸运E 的小R 居然赢了那个游戏.现在欣喜万分的小R 想要写一张明信片给小Y ...

  3. 【JZOJ4813】【NOIP2016提高A组五校联考2】running

    题目描述 小胡同学是个热爱运动的好孩子. 每天晚上,小胡都会去操场上跑步,学校的操场可以看成一个由n 个格子排成的一个环形,格子按照顺时针顺序从0 到n-1 标号. 小胡观察到有m 个同学在跑步,最开 ...

  4. 【NOIP2016提高A组五校联考2】running

    题目 小胡同学是个热爱运动的好孩子. 每天晚上,小胡都会去操场上跑步,学校的操场可以看成一个由n个格子排成的一个环形,格子按照顺时针顺序从0 到n- 1 标号. 小胡观察到有m 个同学在跑步,最开始每 ...

  5. 【2020五校联考NOIP #4】今天的你依旧闪耀

    题面传送门 题意: 对于一个长度为 \(n\)(\(n\) 为偶数)的排列 \(p\),定义一次"变换"后得到的排列 \(p'\) 为: \(p'_i=\begin{cases}p ...

  6. 【五校联考3day2】C

    題意: 現有一平面直角坐標系,有n個點,每一個點必須向某一個方向發射射線,且任意一條射線必須與某一條坐標軸平行.定義一種發射射線的方案是合法的,則方案必須滿足: 1.沒有一條射線交叉 2.沒有一條射線 ...

  7. 五校联考R1 Day1T3 平面图planar(递推 矩阵快速幂)

    题目链接 我们可以把棱柱拆成有\(n\)条高的矩形,尝试递推. 在计算的过程中,第\(i\)列(\(i\neq n\))只与\(i-1\)列有关,称\(i-1\)列的上面/下面为左上/左下,第\(i\ ...

  8. 五校联考R1 Day2T2 矩阵matrix(容斥)

    题目链接 容易想到容斥,但是很恶心,因为要对行和列都容斥,然后行+列又要容斥.. 于是得到\(O(nm\log)\)的做法. 就有70分了: #include <cstdio> #incl ...

  9. 五校联考模拟赛Day2T2矩阵(容斥原理)

    题意 $n * m$的网格,对其进行黑白染色,问每一行每一列至少有一个黑格子的方案数. Sol 考场上只会$n^3$的dp,还和指数级枚举一个分qwq 设$f[i][j]$表示到了第$i$行,已经有$ ...

随机推荐

  1. Lodop多分出空白页的可能(情况1)

    在用Lodop进行打印超文本的时候,本身内容看上去只有一页,却分页分出空白的一页,很有可能有不可见内容的存在,下面是测试的一种情况,如html内部有内容占着空间,却是不可见的,如一些对象,或者如测试内 ...

  2. BZOJ3456 城市规划(多项式求逆)

    设f[i]为连通图的数量,g[i]为不连通图的数量,显然有f[i]=2i*(i-1)/2-g[i],g[i]通过枚举1所在连通块大小转移,有g[i]=Σf[j]*C(i-1,j-1)·2(i-j)*( ...

  3. BZOJ4836 二元运算(分治FFT)

    设A(n)为a中n的个数,B(n)为b中n的个数.如果只考虑加法显然是一个卷积,减法翻转一下也显然是一个卷积. 问题在于两者都有.容易想到分开处理.那么可以考虑分治.即对于值域区间[l,r],分别计算 ...

  4. day5 if else elif 判断语句

    age_of_princal = 56 guess_age = int( input(">>:") ) '''伪代码,提供思路用 if guess_age == age ...

  5. MT【73】求函数表达式

    评:由关系式求表达式最经典的莫过于已知$f(x+y)=f(x)f(y)$利用柯西法求得 $f(x)=[f(1)]^x$

  6. MT【61】含参数二次函数最大最小值

    评:此类题目在高考中作为压轴题也曾考过,一般通性通法都如上面的做法,但是我们如果可以站在包络的角度,很多问题将变得很清晰:

  7. 自学Linux Shell1.2-Linux目录结构

    点击返回 自学Linux命令行与Shell脚本之路 1.2-Linux目录结构 /:  根目录,一般根目录下只存放目录,不要存放文件,/etc./bin./dev./lib./sbin应该和根目录放置 ...

  8. 自学Zabbix3.12.4-动作Action-Operation配置

    点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 3.12.4 自学Zabbix3.12.4-动作Action-Operation配置 1. 概述 ...

  9. SpringCloud学习(二)---Eureka

    Eureka 重点在使用,概念和源码基本不涉及 Eureka是一个基于REST(REST是HTTP协议的)的服务,主要在亚马逊网络服务(AWS)云中使用,定位服务来进行中间层服务器的均衡负载和故障转移 ...

  10. Java NIO -- 直接缓冲区与非直接缓冲区

    直接缓冲区与非直接缓冲区: 非直接缓冲区:通过 allocate() 方法分配缓冲区,将缓冲区建立在 JVM 的内存中直接缓冲区:通过 allocateDirect() 方法分配直接缓冲区,将缓冲区建 ...