【2020五校联考NOIP #4】今天的你依旧闪耀
题意:
对于一个长度为 \(n\)(\(n\) 为偶数)的排列 \(p\),定义一次“变换”后得到的排列 \(p'\) 为:
\(p'_i=\begin{cases}p_{(i+n+1)/2}&&i \nmid 2\\p_{i/2}&&i\mid2\end{cases}\)
设函数 \(f(i)\) (\(i\) 为偶数),如果长度为 \(i\) 的排列 \(p_j=j\) 经过 \(i\) 次变换恰好第一次回到原样,那么返回 \(i\),否则返回 \(0\)。
现在给出一个偶数 \(A\),求 \([2,A]\) 中所有偶数的 \(f\) 的值的和。
\(2 \leq A \leq 10^7\)
不太难的题,简单写写吧。
容易注意到 \(i\) 经过一次变换变为 \(2i \bmod (n+1)\)。
假设 \(1\) 经过 \(k\) 变换恰好回到 \(1\),那么有 \(2^k\equiv1\pmod{n+1}\)
两边同时乘上 \(i\) 得到 \(i2^k\equiv i\pmod{n+1}\)
也就是说如果 \(1\) 经过 \(k\) 变换恰好回到 \(1\),那么排列就会变回原样。
现在我们就变为对于每个 \(i\),判断 \(i\) 是否为最小的满足 \(2^k\equiv1\pmod{i+1}\) 的 \(k\)。
首先根据欧拉定理 \(2^{\varphi(i+1)}\equiv1\pmod{i+1}\),如果 \(i+1\) 不是质数,那么 \(\varphi(i+1)<i\),\(i\) 就不是最小的满足 \(2^k\equiv1\pmod{n+1}\) 的 \(k\)。
进一步观察,如果满足条件的 \(k\) 不是 \(i\),那么 \(k<i\)。将 \(i\) 分解质因数得到 \(p_1^{\alpha_1}\times p_2^{\alpha_2} \times\dots p_l^{\alpha_l}\),\(k\) 一定是 \(\frac{i}{p_1},\frac{i}{p_2},\dots,\frac{i}{p_l}\) 中某个数的约数。故我们只需检查 \(2^{\frac{i}{p_1}},2^{\frac{i}{p_2}},\dots,2^{\frac{i}{p_l}}\) 是否模 \(i+1\) 余 \(1\) 就行了。
由于 \([1,n]\) 质因数个数最多也就 \(8\) 个,所以就算跑满了时间复杂度也不过 \(8\pi(n)\log n\),足以过这道题。
/*
Contest: -
Problem: NFLSOJ 701
Author: tzc_wk
Time: 2020.10.5
*/
#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pb push_back
#define fz(i,a,b) for(int i=a;i<=b;i++)
#define fd(i,a,b) for(int i=a;i>=b;i--)
#define foreach(it,v) for(__typeof(v.begin()) it=v.begin();it!=v.end();it++)
#define all(a) a.begin(),a.end()
#define fill0(a) memset(a,0,sizeof(a))
#define fill1(a) memset(a,-1,sizeof(a))
#define fillbig(a) memset(a,0x3f,sizeof(a))
#define y1 y1010101010101
#define y0 y0101010101010
typedef pair<int,int> pii;
typedef long long ll;
inline int read(){
int x=0,neg=1;char c=getchar();
while(!isdigit(c)){
if(c=='-') neg=-1;
c=getchar();
}
while(isdigit(c)) x=x*10+c-'0',c=getchar();
return x*neg;
}
int n=read();
bool vis[10000005];
int pr[10000005],pcnt=0;
int mnp[10000005];
inline ll qpow(ll x,int e,ll MOD){
ll ans=1;
while(e){
if(e&1) ans=ans*x%MOD;
x=x*x%MOD;e>>=1;
}
return ans;
}
inline void prework(int x){
for(int i=2;i<=x;i++){
if(!vis[i]){pr[++pcnt]=i;mnp[i]=i;}
for(int j=1;j<=pcnt&&i*pr[j]<=x;j++){
vis[i*pr[j]]=1;mnp[i*pr[j]]=pr[j];
if(i%pr[j]==0) break;
}
}
}
int main(){
prework(1e7);ll sum=0;
for(int i=2;i<=n;i+=2){
if(vis[i+1]) continue;
bool flag=1;int tmp=i;
vector<int> p;
while(tmp!=1){
int x=mnp[tmp];tmp/=x;
if(p.empty()||p.back()!=x) p.pb(x);
}
for(int j=0;j<p.size();j++) if(qpow(2,i/p[j],i+1)==1) flag=0;
if(flag) sum+=i;
}
printf("%.5lf\n",1.0*sum/(n>>1));
return 0;
}
UPD on \(2020/10/19\):
洛 阳 铲(其实也就两周之前)
关于上文中“\(k\) 一定是 \(\frac{i}{p_1},\frac{i}{p_2},\dots,\frac{i}{p_l}\) 中某个数的约数”一句,一直有些疑惑,故刚刚 yy 了几分钟把它搞通了,今写在这里,以免下次再忘记。
我们假设最小的满足 \(2^k \equiv 1 \pmod{i+1}\) 的 \(k\) 为 \(l\),那么 \(2^{i-l} \equiv 1 \pmod{i+1}\)。
反证法,假设 \(l\) 不是 \(i\) 的约数,那么 \(l \nmid i-l\)。
设 \(i-l=pl+q(q<l)\),那么 \(2^{i-l}=2^{pl+q}=(2^l)^p\times 2^q\equiv 1^p\times 2^q=2^q\equiv 1\pmod{i+1}\)
故 \(2^q \equiv 1\pmod{i+1}\),又 \(q<l\),与我们之前的“\(l\) 是最小的满足 \(2^k \equiv 1 \pmod{i+1}\) 的 \(k\)”矛盾。
故 \(l\) 为 \(i\) 的约数。而 \(l \neq i\),所以 \(l\) 一定是 \(\frac{i}{p_1},\frac{i}{p_2},\dots,\frac{i}{p_l}\) 中某个数的约数。
【2020五校联考NOIP #4】今天的你依旧闪耀的更多相关文章
- 【2020五校联考NOIP #6】三格缩进
题意: 给出 \(n\) 个数 \(a_1,a_2,\dots,a_n\),你要进行 \(m\) 次操作,每次操作有两种类型: \(1\ p\ x\):将 \(a_p\) 改为 \(x\). \(2\ ...
- 【2020五校联考NOIP #8】自闭
题目传送门 题意: 有一个 \(n \times m\) 的矩阵,里面已经填好了 \(k\) 个非负整数. 问是否能在其它 \(n \times m-k\) 个格子里各填上一个非负整数,使得得到的矩阵 ...
- 【2020五校联考NOIP #8】狗
题面传送门 原题题号:Codeforces 883D 题意: 有 \(n\) 个位置,每个位置上要么有一条狗,要么有一根骨头,要么啥都没有. 现在你要给每个狗指定一个方向(朝左或朝右). 朝左的狗可以 ...
- 【2020五校联考NOIP #7】道路扩建
题面传送门 题意: 给出一张 \(n\) 个点 \(m\) 条边的无向图 \(G\),第 \(i\) 条边连接 \(u_i,v_i\) 两个点,权值为 \(w_i\). 你可以进行以下操作一次: 选择 ...
- 【2020五校联考NOIP #3】序列
题面传送门 原题题号:Codeforces Gym 101821B 题意: 给出一个排列 \(p\),要你找出一个最长上升子序列(LIS)和一个最长下降子序列(LDS),满足它们没有公共元素.或告知无 ...
- 【2020五校联考NOIP #7】伟大的卫国战争
题面传送门 题意: 数轴上有 \(n\) 个点,现在要在它们之间连 \(m\) 条边,第 \(i\) 条边连接 \(a_i,b_i\) 两个点. 现在你要钦定每条边连在数轴的上方还是下方,使得任意两条 ...
- 【2020五校联考NOIP #6】最佳观影
题意: 给出一个 \(k \times k\) 的网格和 \(n\) 次操作.其中 \(k\) 为奇数. 每次操作给出一个数 \(m\).每次你要找出一个三元组 \((x,l,r)\) 使得: \(r ...
- 【2020五校联考NOIP #2】矩阵
咕咕咕到现在~ 题面传送门 题意: 给出一个 \(n\times n\) 的矩阵 \(A\).要你求有多少个 \(n\times n\) 的矩阵 \(B\) 满足: 每一行都是 \(1\) 到 \(n ...
- 【五校联考1day2】JZOJ2020年8月12日提高组T2 我想大声告诉你
[五校联考1day2]JZOJ2020年8月12日提高组T2 我想大声告诉你 题目 Description 因为小Y 是知名的白富美,所以自然也有很多的追求者,这一天这些追求者打算进行一次游戏来踢出一 ...
随机推荐
- 数字IC设计工程师的知识结构
刚毕业的时候,我年少轻狂,以为自己已经可以独当一面,庙堂之上所学已经足以应付业界需要.然而在后来的工作过程中,我认识了很多牛人,也从他们身上学到了很多,从中总结了一个IC设计工程师需要具备的知识架构, ...
- 什么是产品待办列表?(What is Product Backlog)
正如scrum指南中所描述的,产品待办事项列表是一个紧急而有序的列表,其中列出了改进产品所需的内容.它是scrum团队承担的工作的唯一来源. 在sprint计划 (Sprint Planning)活动 ...
- 提升使用Linux效率的小操作
提升使用Linux效率的小操作 保存更新? 本文记录了个人在使用Linux时觉得好用的一些快捷方式/功能: 为那种知道了能提高效率,但是的不知道也并没有影响的操作. 历史命令 该操作用于快速查看已使用 ...
- [敏捷软工团队博客]Beta阶段事后分析
设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们的软件要解决的问题是:现在的软工课程的作业分布在博客园.GitHub上,没有一个集成多种功能的一体化 ...
- gson中TypeAdapter实现自定义序列化操作
最近在项目中遇到这么一个问题,我们后台需要向前端返回一个 json 数据,就是将一个地理位置对象以json的格式返回到前台,但是这个地理位置对象中的经纬度是Double数据类型,项目中规定,如果经纬度 ...
- [火星补锅] 水题大战Vol.2 T1 && luogu P1904 天际线 题解 (线段树)
前言: 当时考场上并没有想出来...后来也是看了题解才明白 解析: 大家(除了我)都知道,奇点和偶点会成对出现,而出现的前提就是建筑的高度突然发生变化.(这个性质挺重要的,我之前没看出来) 所以就可以 ...
- 攻防世界 杂项 5.wireshark-1
题目描述: 黑客通过wireshark抓到管理员登陆网站的一段流量包(管理员的密码即是答案). flag提交形式为flag{XXXX} 看到登录应该想到它是HTTP POST请求,wireshark搜 ...
- 你一定不知道的Unsafe用法
Unsafe是什么 首先我们说Unsafe类位于rt.jar里面sun.misc包下面,Unsafe翻译过来是不安全的,这倒不是说这个类是不安全的,而是说开发人员使用Unsafe是不安全的,也就是不推 ...
- Spring Security:如何在Postman中优雅地测试后端API(前后端分离)
前言 在Postman中可以编写和执行自动化测试,使用 JavaScript 编写基本的 API 测试,自由编写任何用于自动化测试的测试方案. 在POSTMAN中读取Cookie值 1. 我们需要向& ...
- Mybatis的分页插件com.github.pagehelper
1. 需要引入PageHelper的jar包 如果没有使用maven,那直接把jar包导入到lib文件夹下即可,这个PageHelper插件在github上有开源, 地址为:https://githu ...